通过props来初始化子组件的状态是否正确?
Is it correct to initialize state of child component via props?
我需要从父组件初始化子组件的状态。所以我用下面的方法来做:
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
的值(例如,通过一些用户交互)。因为state
上的某个值应该是某个instance variable
,其值可能会根据组件的状态而变化。但需要注意的是,改变state.timer
的值不会改变timer
的值。
如果你不想在组件中改变this.state.timer
的值,你可以这样使用它:
render () {
return <div>{this.props.timer}</div>
}
注意:这并不是一个真正针对react的技巧,因为这种反模式通常会出现在代码中;在这种情况下,React只是更清楚地指出它们。
在getInitialState
中使用props生成状态通常会导致"source of truth"
中的duplication
,即真实数据所在的位置。这是因为getInitialState只在组件第一次创建时调用。
在任何可能的情况下,动态计算值以确保它们不会在以后失去同步并引起维护问题。
相关文章:
- 检查元素是否将状态从隐藏更改为可见
- 我如何为列出的选项卡元素编写一个Protractor测试,它会检查它是否's是否处于活动状态
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- reactjs-redux,是否可以有一个由2个组件使用的状态
- 是否可以在reactjs中设置多个状态变量
- 检查网络驱动程序是否浏览器仍处于打开状态
- 检查 redux 状态是否更改的简单方法
- Reactjs:在修改对象之前,是否需要复制处于组件状态的对象
- 是否可以在没有视图状态和回发的情况下使用asp.net web表单
- 使用jquery检查internet是否处于活动状态
- 查看CSS:invalid选择器当前是否在JavaScript中处于活动状态
- 如何检查Promise是否处于挂起状态
- 反应:状态更改是否会导致整个组件被重绘
- Facebook API - 检测会话是否处于活动状态
- 如何确定当前路由在 React 中是否处于活动状态
- 如何使用 *jquery mmenu 插件*检查复选框是否处于选中状态
- 我是否必须在 React 中使用 this.state 来维护组件状态
- 检查类是否处于活动状态,如果是,请运行外部.js文件?可能
- 在拉力赛中:我是否可以将自定义任务状态映射到拉力赛任务板中的现有任务状态(类似于用户情景的看板)
- 检测浏览器选项卡是否处于活动状态或用户是否已切换