Mobx-State-Tree AfterCreate () не синхронно в реагировать родной - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь загрузить приложение initialState, выполнив функцию load() в afterCreate() моего UserModel. Я пытаюсь загрузить страницу Authenticated вместо страницы Login, если обнаружу, что accessToken не пуст в UserStore.

Однако страница отображается до запуска функции загрузки afterCreate(). Это всегда приводит меня к странице входа.

Я следил в основном за этим видеоуроком от egghead.io, но я не уверен, почему он не работает в моем случае.

Я действительно застрял, и любые предложения приветствуются!

То, как я прохожу свой магазин, проходит в магазине, используя Provider в моем App.js.

UserModel.js

const User = types
  .model("User", {
    accessToken: types.string
  })
  .actions(self => ({
    afterCreate() {
      self.load();
    },
    load: flow(function*() {
      const localData = yield LocalDB.get("user");
      applySnapshot(self, localData);
    })

  }));

Объект LocalDB - это просто оболочка вокруг AsyncStorage, помогающая анализировать данные в формате json.

LocalDB.js

const LocalDB = {    
  get: async function(key) {
    try {
      let value = await AsyncStorage.getItem(key);

      try {
        return JSON.parse(value);
      } catch (err) {
        return value;
      }
    } catch (err) {
      console.error(err);
      return false;
    }

App.js

let store = UserStore.create({...})
export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <Router />
      </Provider>
    );
  }
}

1 Ответ

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

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

let store = UserStore.create({accessToken: ""})

Как только я обновил его до null, он работает нормально.

let store = UserStore.create({accessToken: null})
...