Как вы храните в моделях тип, не являющийся деревом состояний mobx (экземпляр класса)?

Я получил:

Ошибка: [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')),
})

Я мог бы объявить его в конструкторе моего компонента React вместо того, как раньше

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

но тогда все прикрепленные обработчики событий также должны быть определены в компоненте

componentDidMount(){
  this.connection.on('Someaction', async(res: any) => {});
}

и запуск / закрытие соединения

handleBtnClicked = () => {
  this.connection.start().then(() => self.connection.invoke('Someotheraction'));
}

и в идеале я думаю, что это относится к модели и действиям модели, поэтому компонент реакции запускает только действия в модели и ничего более.

Есть ли способ хранить другие типы, кроме mobx-state-tree, в моделях mobx-state-tree, можете ли вы как-то обернуть его в тип mobx, или это на самом деле не то, что принадлежит mobx и, следовательно, намеренно.


person Soren    schedule 08.01.2018    source источник


Ответы (1)


Умышленно, что модели mobx-state-tree могут определять только свойства типов на основе MST. Это потому, что эти типы являются снимаемыми, сериализуемыми, исправляемыми и т. Д. В то время как что-то вроде HubConnection не является вещью, которую можно было бы сделать снимками, регидратировать и т. Д.

В MST-дереве можно хранить произвольные вещи, но только не как свойства. Вместо этого вы можете использовать изменчивое состояние

person mweststrate    schedule 08.01.2018
comment
Работает как шарм. Люблю mobx-state-tree! - person Soren; 08.01.2018