我使用react和flux(facebook实现)。在我的组件中,我应该做类似的事情:
componentDidMount () {
UserActions.loadUser(this.props.username);
PublicationActions.findByUser(this.state.userId);
UserStore.on('CHANGE', this._setUser);
// ...
},
问题是this.state.userId
仅在UserActions.loadUser
触发请求完成时定义。
所以解决这个问题的唯一方法就是:
if (this.state.userId && !this.state.publications) {
PublicationActions.findByUser(this.state.userId);
}
直接使用render()
方法。我不喜欢这个解决方案导致render()
用于渲染,我不想弄乱其中的任何业务逻辑。
我发现唯一可接受的解决方案是针对这种情况设置特殊的组件层次结构,如:
<User username={someVar}>
<PublicationsList userId={this.state.userId}/>
</User>
这将强制PublicationsList
成为智能组件(具有状态等),但我希望它是哑渲染器。这是唯一的方式还是有更好的方法?
答案 0 :(得分:1)
UserAction.loadUser
收听的商店。
PublicationActions.findByUser(YourStore.getState().userId)
答案 1 :(得分:1)
您可以扩展loadUser
方法以接受带有有效负载作为参数的回调。
即:
loadUser(username, callback) {
// some ajax stuff
callback(payload);
}
然后,在您的jsx文件中,您可以编写如下内容:
componentDidMount () {
UserActions.loadUser(this.props.username, (user) => {
PublicationActions.findByUser(user.userId);
});
UserStore.on('CHANGE', this._setUser);
// ...
},