如何在模型中存储非mobx-state-tree类型(Class实例)?

Sor*_*ren 0 mobx mobx-state-tree

我明白了:

错误:[mobx-state-tree]期望一个mobx-state-tree类型作为第一个参数,得到类HubConnection {constructor(urlOrConnection,options = {}){options = options || {};

尝试这样做时:

import { HubConnection } from '@aspnet/signalr-client';
.model('MyStore', {
  connection: types.optional(HubConnection, new HubConnection('http://localhost:5000/myhub')),
})
Run Code Online (Sandbox Code Playgroud)

我可以在我的React组件的构造函数中声明它,而不是像以前那样

constructor(props){
  super(props);
  this.connection = new HubConnection('http://localhost:5000/myhub');
}
Run Code Online (Sandbox Code Playgroud)

但是,所有附加的事件处理程序也需要在组件中定义

componentDidMount(){
  this.connection.on('Someaction', async(res: any) => {});
}
Run Code Online (Sandbox Code Playgroud)

并开始/关闭连接

handleBtnClicked = () => {
  this.connection.start().then(() => self.connection.invoke('Someotheraction'));
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我认为这属于模型和模型动作,因此反应组件仅触发对模型的操作,仅此而已.

有没有办法在mobx-state-tree模型中存储除mobx-state-tree类型之外的其他方法,你能以某种方式将它包装在mobx类型中,或者这实际上不是属于mobx的东西,因此故意.

mwe*_*ate 5

有意的是,mobx-state-tree模型只能定义基于MST的类型的属性.这是因为这些类型是快照,可序列化,可修补等等.虽然类似a HubConnection的东西不是可以快照,重新水合等的东西.

可以在MST树中存储任意内容,但不能作为道具.相反,您可以使用易失性状态