Почему наблюдаемое свойство mobx класса js не отслеживается, а свойство наблюдаемого объекта mobx есть? - PullRequest
0 голосов
/ 29 ноября 2018

Я новичок в mobx, и я хотел сделать быстрый тест Mobx, чтобы увидеть, как я могу приспособить его к моему проекту.

Когда я запускаю этот код

class Entity{
   @observable version = 1;
}

let testEntity = new Entity();

let disposer = autorun(() => console.log(`Entity version : ${testEntity.version}`));

testEntity.version = 2;
testEntity.version = 3;

disposer();

Я ожидаю увидеть этот вывод

Entity version : 1
Entity version : 2
Entity version : 3

Но вместо этого я вижу только Entity version : 1

Но если я использую наблюдаемый простой объект вместо класса с наблюдаемыми свойствами, я получаю желаемоевыход.Пример:

let testEntity = observable({ version: 1 });

let disposer = autorun(() => console.log(`Entity version : ${testEntity.version}`));

testEntity.version = 2;
testEntity.version = 3;

disposer();
// this works and I see autorun firing three times instead of only the first.

Так что я подумал, что должен сделать экземпляр класса наблюдаемым.

Я использовал let testEntity = observable(new Entity());, но это вызвало ошибку в некоторой функции .box.

Я попробовал снова, на этот раз с let testEntity =observable.box(new Entity());, и у меня не было ошибок.

Но на этот раз я получил этот результат Entity version : undefined

Что здесь происходит и как я могу достичьнаблюдаемые экземпляры классов?

Может быть, я неправильно следую своей проблеме.Я хочу, чтобы мои доменные объекты использовались в качестве экземпляров классов для добавления некоторой бизнес-логики и манипулирования данными внутри них.

Я прочитал статью о том, что отслеживает MOBX, а что нет, но, похоже, я все ещечто-то пропустить.

1 Ответ

0 голосов
/ 30 ноября 2018

Я не использовал autorun много, но я думаю, проблема в том, что вы звоните autorun вне класса.Попробуйте переместить эту строку кода в ваш класс:

class Entity{
   @observable version = 1;

   let disposer = autorun(() => console.log(`Entity version : ${version}`));
}

let testEntity = new Entity();



testEntity.version = 2;
testEntity.version = 3;

testEntity.disposer();
...