有问题的代码如下。我在UserActions中有一个异步componentDidMount调用,此后我立即从此操作填充的UserStore中查找用户信息。显然,我不能依赖于定义的UserStore.isLargeAccess()。是将代码依赖于回调中的操作的最佳约定,还是我错过了一些更大的设计选择?

componentDidMount() {
    this.changeListener = this._onChange.bind(this);
    UserStore.addChangeListener(this.changeListener);
    OrganizationStore.addChangeListener(this.changeListener);

    // Fetch user info
    UserActions.get(AuthStore.username);

    // UserStore.isLargeAccess() is undefined here,
    // because the previous action has not finished.
    if (UserStore.isLargeAccess()) {
      OrganizationActions.getUsers(this.state.organization);
    }

    if (UserStore.isGlobalAccess()) {
      OrganizationActions.getOrganizations();
    }
  }

最佳答案

它应该如何工作(如果我理解您的流程):


您应该为每个商店注册不同的回调(否则您不知道哪个商店发出事件)
您开始一些异步工作。
异步工作完成后,它将使用异步工作中的一些数据调度操作
您的商店UserStore和OrganizationStore会监听此操作,当他们收到该操作时,他们会做一些工作并发出更改。
当它们发出更改时,它们将从您的组件中调用回调。在每个回调中,您知道哪个存储调用它,因此您知道从哪个存储获取数据。

关于javascript - ReactJS-等待 Action 在componentDidMount中完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34600862/

10-11 08:24