实际上,为什么我不能直接修改组件的状态?

实际上,为什么我不能直接修改组件的状态?,第1张

实际上,为什么我不能直接修改组件的状态

React文档

setState
对此有这样的说法:

切勿

this.state
直接进行突变,因为
setState()
随后的呼叫可能会取代您所做的突变。对待
this.state
就好像它是不可变的。

setState()
不会立即变异,
this.state
但会创建待处理的状态转换。
this.state
调用此方法后进行访问可能会返回现有值。

无法保证对呼叫的同步 *** 作,

setState
并且可以为提高性能而对呼叫进行批量处理。

setState()
除非在中实现了条件渲染逻辑,否则它将始终触发重新渲染
shouldComponentUpdate()
。如果正在使用可变对象,并且无法在中实现逻辑
shouldComponentUpdate()
,则
setState()
仅在新状态与先前状态不同时进行调用才能避免不必要的重新渲染。

基本上,如果

this.state
直接进行修改,则会造成一种情况,即这些修改可能会被覆盖。

与您的扩展问题1)和2)有关,

setState()
不是立即的。
它根据其正在进行的状态对状态转换进行排队,该状态转换可能不包括对的直接更改
this.state
。由于已排队而不是立即应用,因此完全有可能在两者之间进行某些修改,以使您的直接更改被覆盖。

如果没有别的,您可能会觉得更好,只是考虑将不直接修改

this.state
视为良好做法。您可能个人知道您的代码与React交互时不会发生这些覆盖或其他问题,但是您正在创建一种情况,其他开发人员或将来的更新可能突然发现自己遇到奇怪或微妙的问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5021859.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存