【发布时间】:2015-05-01 08:20:48
【问题描述】:
我在 SocketIO 的帮助下创建了一个小型 ReactJS 仪表板,用于实时更新。即使我更新了仪表板,但我不确定我是否正确地更新了它。
最让我烦恼的是Props in getInitialState as anti-pattern 的帖子。我创建了一个仪表板,可以从服务器获取实时更新,除了加载页面之外不需要用户交互。根据我的阅读,this.state 应该包含决定是否应该重新渲染组件的内容,而this.props....我还不知道。
但是,当您最初调用React.render(<MyComponent />, ...) 时,您只能传递道具。就我而言,我从服务器获取所有数据,所以初始道具最终还是以this.state 结尾。所以我所有的组件都有这样的东西:
getInitialState: function() {
return {
progress: this.props.progress,
latest_update: this.props.latest_update,
nearest_center: this.props.nearest_center
}
}
除非我误解了上述博客文章,否则这是一种反模式。但是我看不到将状态注入组件的其他方法,我不明白为什么它是一种反模式,除非我重新标记所有道具以在它们前面加上 initial。如果有的话,我觉得这是一种反模式,因为现在我必须跟踪比以前更多的变量(那些以initial 开头的变量和那些没有的变量)。
【问题讨论】:
-
2017 年,Facebook 在其文档中演示了使用道具设置初始状态:reactjs.org/docs/react-component.html#constructor
-
@Rohmer 的链接包含指向You probably don't need derived state 的链接,其中深入讨论了替代方案以及应避免的事项。
标签: reactjs