Javascript 在render()中修改此.state是否合乎卫生标准?
如果组件从其他地方接收到空值,我想将状态设置为其默认值。由于没有Javascript 在render()中修改此.state是否合乎卫生标准?,javascript,reactjs,Javascript,Reactjs,如果组件从其他地方接收到空值,我想将状态设置为其默认值。由于没有组件WillReceiveState(),因此我只能检查组件WillUpdate()中的更改。但是在这个函数中,我不能调用setState()。无论如何,由于在初始渲染期间没有调用componentWillUpdate(),因此这是不可靠的。唯一的方法似乎是直接在render()中修改this.state。我想知道这是否违背了某些规则或假设。既然你在谈论状态,那么当你调用setState(在生命周期内)或使用构造函数时,你应该能够默
组件WillReceiveState()
,因此我只能检查组件WillUpdate()
中的更改。但是在这个函数中,我不能调用setState()
。无论如何,由于在初始渲染期间没有调用componentWillUpdate()
,因此这是不可靠的。唯一的方法似乎是直接在render()
中修改this.state
。我想知道这是否违背了某些规则或假设。既然你在谈论状态,那么当你调用setState
(在生命周期内)或使用构造函数时,你应该能够默认为null
改变这个状态是不好的。我同意@oluckyman。如果在render
中操作状态,则组件结构出现问题
您应该能够基于其他变量有条件地输出组件的某些位(例如,this.props
)
如果您必须更新渲染中的状态,那么您就做错了。您说过“如果组件从空接收”,但不清楚这null
从何而来?空基本上用于指示默认值。组件更清楚应该是什么。这不是一个常见的设计。我仍然不明白我们谈论的null
是什么?如果我们在状态中谈论null
,这意味着您的组件将state
属性设置为null
,对吗?像这样:this.setState({attr:null})
。在这种情况下,您应该用默认值替换null
,如David所说。或者,正如Clarkie所说,当发现值为null时,只需在render
方法中使用默认值。或者用代码样本更新你的问题对不起,问题中有一个词不知怎么漏掉了。对setState()的调用是从组件外部进行的。基本上,setState()用于将数据传递给它先前请求的组件。在render()中使用条件的缺点是,在React Dev工具栏中看不到默认值。其他寿命周期功能也不会看到该值。设置this.state更干净。直接更改this.state通常是错误的原因是,首先,这样做不会触发重新渲染器,因此state对象将与演示不一致;第二,队列中可能有前面的setState(),它最终会覆盖您的更改。这两个都不是render()中的问题。该函数可能是唯一可以安全更改此.state的地方。
render: function () {
if (!this.props.foo) return null;
// if you have some foo then do something else
}