我想更改hasSubmit
键的值,就像在“第一个代码”部分中一样。我知道不推荐这样做。但是第二个代码是异步的,我不想使用setState
的回调函数。this.state
和setState
有什么区别?
有什么方法可以立即更改状态值hasSubmit
?
第一个代码:
this.state.hasSubmit = false
this.setState({})
//Code that will use `hasSubmit`.
第二个代码:
this.setState({
hasSubmit: false,
});
//Code that will use `hasSubmit`.
加:
该方案是:
hasSubmit
在false
中设置getInitialState()
。当我单击
hasSubmit
按钮时,false
将更改为submit
。提交后,
hasSubmit
将更改为true
。第一次单击
submit
没问题,并且hasSubmit
将设置为true
。但是第二次单击
submit
使用Second asynchronous code
是错误的,因为hasSubmit
仍然是true
,而First Code
可以解决问题。 最佳答案
这是React docs所说的:
切勿直接更改this.state
,因为之后调用setState()可能会替换您所做的更改。将此this.state视为不可变的。
setState()
不会立即使this.state突变,而是创建一个挂起的状态转换。调用此方法后访问this.state
可能会返回现有值。
无法保证对setState的调用的同步操作,并且可能为提高性能而对调用进行批处理。
除非在setState()
中实现了条件渲染逻辑,否则shouldComponentUpdate()
将始终触发重新渲染。
如果正在使用可变对象,并且逻辑不能在shouldComponentUpdate()
中实现,则仅当新状态不同于先前状态时调用setState()
可以避免不必要的重新渲染。
按照API的设计方式使用API总是明智的。如果文档说不改变您的状态,那么最好不要改变您的状态。
尽管setState()
从技术上讲可能是异步的,但以任何明显的方式肯定不会慢。该组件的render()
函数将在很短的时间内被调用。
直接设置状态的一个缺点是React的生命周期方法-shouldComponentUpdate()
,componentWillUpdate()
,componentDidUpdate()
-依赖于通过setState()
调用的状态转换。如果直接更改状态并用空对象调用setState()
,则无法再实现这些方法。
另一个是它只是不好的编程风格。您用两个语句执行的操作可能要执行一次。
而且,这里没有实际的好处。在这两种情况下,直到调用render()
(或setState()
)之后,才会触发forceUpdate()
。
您声称需要执行此操作,而没有实际解释该需求是什么。也许您想进一步详细说明问题。可能有更好的解决方案。
最好使用框架而不是反对框架。
更新
从下面的评论:
我需要在下面使用更改后的hasSubmit。
好的我现在明白了。如果您需要立即使用future状态属性,那么最好的选择就是将其存储在局部变量中。
const hasSubmit = false;
this.setState({
hasSubmit: hasSubmit
});
if (hasSubmit) {
// Code that will use `hasSubmit` ...
关于javascript - ReactJS中this.state和this.setstate有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42164720/