Reactjs 在React中,setState和forceUpdate之间有什么区别
在不覆盖shouldComponentUpdate的组件中,forceUpdate和setState之间有什么区别吗 更新:我已经知道文档中说了什么,forceUpdate不是推荐的方法。我只是想对正在发生的事情有更深入的了解。我想知道为什么?我已经知道setState将传递的对象(状态“delta”-有点像sql更新)与当前状态对象合并 假设一个简单的用例:不需要撤销或时间旅行功能。不需要在shouldComponentUpdate中进行指针比较。事实上,根本不需要使用shouldComponentUpdate 在这种情况下,在我看来,改变状态并调用forceUpdate()是使用React的一种非常有效的方法。从黑盒的角度来看,这两种技术似乎具有完全相同的效果: 技巧#1: 这个.state.x=10; 这个.forceUpdate() 技术#2: this.state.setState({x:10}) 再说一次,我已经知道有些人更喜欢从不改变状态。并使用函数式编程风格。我只是想知道是否有任何技术原因可以避免使用技术1。还是我遗漏了什么?关于Reactjs 在React中,setState和forceUpdate之间有什么区别,reactjs,Reactjs,在不覆盖shouldComponentUpdate的组件中,forceUpdate和setState之间有什么区别吗 更新:我已经知道文档中说了什么,forceUpdate不是推荐的方法。我只是想对正在发生的事情有更深入的了解。我想知道为什么?我已经知道setState将传递的对象(状态“delta”-有点像sql更新)与当前状态对象合并 假设一个简单的用例:不需要撤销或时间旅行功能。不需要在shouldComponentUpdate中进行指针比较。事实上,根本不需要使用shouldCompon
setState()的概述
setState()
函数通常用于使用一个或多个新状态属性更新组件状态。这是改变状态和管理视图更新的典型方式
从官方文件:
setState()
将更改排入组件状态队列并告知React
此组件及其子组件需要使用
更新状态。这是用于更新用户的主要方法
接口以响应事件处理程序和服务器响应
关于forceUpdate()的概述
forceUpdate()
函数只是强制重新呈现组件及其相关子组件的一种方法。它根本不会改变状态
在可能的情况下,您应该避免使用此功能,因为它偏离了React思维模式,即您的状态和道具只负责保持应用程序逻辑与视图的最新状态
从官方文件:
默认情况下,当组件的状态或道具发生更改时
组件将重新渲染。如果您的render()
方法依赖于某些
对于其他数据,您可以告诉React组件需要重新渲染
通过调用forceUpdate()
通常,您应该尽量避免使用forceUpdate()
,只从render()
中的this.props
和this.state
读取
区别
需要注意的是,forceUpdate()
将跳过shouldComponentUpdate()
(如果有)中的逻辑检查,其中assetState()
不会跳过它
这里一个有趣的注意事项是,以下两行将始终产生相同的结果:
this.setState(this.state);
this.forceUpdate();
…除非shouldComponentUpdate()
可以返回false
,如上所述
除上述内容外,两者之间没有功能上的区别。在《FullStack React》一书中,有一章介绍了基本计时器应用程序。在本章中,他们使用forceUpdate()重新呈现UI,并给出以下解释:
“你可能会问:如果我们不不断地打电话,不是会更有效率吗?”
未运行的计时器上的forceUpdate()?
事实上,我们可以节省一些周期,但不值得添加代码
React将调用render(),该函数执行一些简单的操作
然后将此结果与上一个结果进行比较
调用render()并查看是否没有任何更改。它会在那里停止-不会
尝试任何DOM操作。“
摘自:安东尼·阿科马佐、阿里·勒纳、大卫·古特曼、内特·默里、克莱
奥尔索普和泰勒·麦金尼斯。“满栈反应”我的书
我认为这意味着,如果使用setState是可行的,那么您应该获得绝对的最大性能,但是如果所讨论的操作并不昂贵,并且可以避免大量代码复杂性,那么使用forceUpdate()重新呈现UI就可以了。这当然是我的解释,你可能应该通读这本书,从中获得更多的上下文,也许它会帮助你自己下定决心。颤振是一个基于React架构的框架
我认为这篇博客文章实际上给出了这个问题的最佳答案:
注意:Flatter的“空setState调用”大致类似于React的forceUpdate。这两者之间没有相似之处,它们完全不同,setState用于更新状态变量,然后React触发重新渲染,通过forceUpdate()我们可以告诉React组件需要重新渲染。检查这个:使用技巧有一定的缺点1:你可以检查一下性能如何?基本上,如果子组件具有新状态,它将再次重新启动?@TomSawyer,严格来说,性能,forceUpdate()
可能会更快,因为它跳过运行shouldComponentUpdate()
。正如我上面解释的。它将触发所有子组件的渲染,是的。也就是说,请务必使用setState()
。引用源代码时,请使用引号而不是代码块。