3

だから私は2つの店を持っていますAuthorStore

class AuthorStore {
  constructor() {
      // has author.name and is always present in storage
      AsyncStorage.getItem('author').then(action((data) => {
        this.author = JSON.parse(data);
      }));
  }

  @observable author = null;
}

BookStore:

import AuthorStore from 'authorStore';
class BookStore {
  @observable book = {
    authorName: AuthorStore.author.name,
    bookTitle: null
  }
}

がnullであるかのように、のBookStoreプロパティを取得できないというエラーが発生し続けます。したがって、値を割り当てるために最初にコンストラクターを実行せずに、からデフォルト値を読み取ります。nullAuthorStore.author.nameauthorAuthorStore

AuthorStoreコンストラクターによって割り当てられた値を取得するにはどうすればよいauthorですBookStoreか?

4

1 に答える 1

2

-promiseへの参照を保存getItem('author')し、書店で何かを行う前にそれが満たされていることを確認できます。

// authorStore.js
class AuthorStore {
  @observable author = null;
  getAuthorPromise = null;

  constructor() {
    this.getAuthorPromise = AsyncStorage.getItem('author').then(action((data) => {
      this.author = JSON.parse(data);
    }));
  }
}

export default new AuthorStore();

// bookStore.js
class BookStore {
  @observable book = null;

  constructor() {
    authorStore.getAuthorPromise.then(action(() => 
      this.book = {
        authorName: authorStore.author.name,
        bookTitle: null
      };
    ));
  }
}

ストアを作成する前に作成者を取得し、作成者をAuthorStoreコンストラクターに渡すこともできるため、BookStore同期的に作成できます。

// AuthorStore.js
class AuthorStore {
  @observable author = null;

  constructor(author) {
    this.author = author;
  }
}

export default AuthorStore;

// BookStore.js
class BookStore {
  @observable book = null;
  authorStore = null;

  constructor(authorStore) {
    this.authorStore = authorStore;
    this.book = {
      authorName: authorStore.author.name,
      bookTitle: null
    };
  }
}

export default BookStore;

// app.js
import AuthorStore from './AuthorStore';
import BookStore from './BookStore';

AsyncStorage.getItem('author').then(data => {
  const author = JSON.parse(data);
  const authorStore = new AuthorStore(author);
  const bookStore = new BookStore(authorStore);
}));

方法はたくさんあるので覚えておきましょう。

于 2016-08-22T18:04:40.843 に答える