有问题的代码如下。我在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/