我正在以 reactjs / flux 的方式创建简单的应用程序。 我有包含此数据的 MessageStore 和 UserStore :
MessageStore
包含
[
{"id": 1, "text": "It is a test message", "userId": 155123}
]
UserStore
包含
[
{"id": 155123, "name": "Thomas Brown", "age": 35}
]
我正在创建显示消息的组件。它需要用户名,但只能从props
获得 userId 。
目前我使用initial-ajax-like approach来获取此数据(警告:es6反应语法):
componentDidMount() {
var author = UserStore.getById(this.props.userId);
this.setState({
author: author
})
}
render() {
return (<a>{this.state.author.name</a>);
}
是否正确?我发现在这种情况下render
函数被调用两次。 还有其他方法吗?渲染加载图标?在检索数据之前避免渲染?
答案 0 :(得分:2)
应该移动
var author = UserStore.getById(this.props.userId);
return({
author: author
})
部分到getInitialState LifeCycle。
为组件的每个实例调用一次getInitialState,这里有机会初始化实例的自定义状态。与getDefaultProps不同,每次创建实例时都会调用此方法一次。此时您可以访问this.props。