我需要从父元素初始化子组件的状态。所以我通过以下方式做到:
var Timer = React.createClass({
getInitialState: function () {
return {timer: this.props.timer};
},
render () {
return <div>{this.state.timer}</div>
}
});
var App = React.createClass({
getInitialState: function () {
return {timer: 1000};
},
render () {
return <Timer timer={this.state.timer}>
}
});
以这种方式初始化Timer组件的状态是否正确?
答案 0 :(得分:0)
我认为这样做很好。
在您的情况下,我假设您将更改组件内timer
的值(例如,通过某些用户交互)。因为state
上的值应该是某个instance variable
,其值可能会更改以反映组件状态。 但请注意,更改state.timer
值不会更改timer
之外的值。
如果您不更改组件内this.state.timer
的值,您可以像以下一样使用它:
render () {
return <div>{this.props.timer}</div>
}
答案 1 :(得分:0)
注意:强> 这不是一个特定于React的提示,因为这种反模式通常会出现在代码中;在这种情况下,React只是更清楚地指出它们。
使用道具在getInitialState
中生成状态通常会导致duplication
"source of truth"
,即真实数据的位置。这是因为只有在首次创建组件时才会调用getInitialState。
尽可能即时计算值,以确保它们以后不会失去同步并导致维护问题。