Как создать реакцию в магазине mobx

Я хочу автоматически получать пользовательские данные, как показано ниже, но получаю сообщение об ошибке в строке наблюдения:

Uncaught Error: [mobx] Ошибка инварианта: невозможно получить атом из [object Object]

class AuthStore {

 @observable loggedIn = false;
 @observable userData;

  constructor() {
    observe(this, 'loggedIn', (change) => {
          if (change.loggedIn) {
            this.getUserData();
          }
    });
  }

  async getUserData() {
    const response = await ajax({
      url: '/users/me',
      method: 'GET'
    });
    const data = await response.json();
    //todo handle some errors here
    this.userData = data.user;
  }

}

person arisalexis    schedule 15.06.2016    source источник
comment
какую версию MobX вы используете? В версии 2.2.2 была ошибка, из-за которой атрибут loggedIn мог быть еще не инициализирован в конструкторе при использовании Babel. Это исправлено в версии 2.3, и в качестве обходного пути вы можете вставить в конструктор строку, которая гласит: 'this.loggedIn;'   -  person mweststrate    schedule 15.06.2016
comment
да, инициализация конструктора решила это. поставь как правильный ответ   -  person arisalexis    schedule 16.06.2016


Ответы (1)


Вы уже решили это? Если нет, попробуйте использовать reaction вместо observe:

reaction(
  () => this.loggedIn,
  loggedIn => loggedIn && this.getUserData()
)
person flipjs.io    schedule 16.06.2016