Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在render()中修改此.state是否合乎卫生标准?_Javascript_Reactjs - Fatal编程技术网

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
}