Как вы храните не-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 и, следовательно, намеренно.

1 ответ

Решение

Предполагается, что модели дерева состояний mobx могут определять только свойства типов, основанных на MST. Это связано с тем, что эти типы являются снимками, сериализуемыми, исправляемыми и т. Д. HubConnection это не то, что можно сделать снимок, регидратировать и т. д.

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

Другие вопросы по тегам