类组件
在 React 类组件中,我们被告知setState
总是会导致重新渲染,无论状态是否实际更改为新值。实际上,当状态更新为与之前相同的值时,组件将重新渲染。
setState() 将始终导致重新渲染,除非 shouldComponentUpdate() 返回 false。
钩子(函数组件)
但是,使用钩子,文档指定将状态更新为与先前状态相同的值,不会导致(子组件)重新渲染:
退出状态更新
如果您将 State Hook 更新为与当前状态相同的值,React 将退出而不渲染子项或触发效果。(React 使用 Object.is 比较算法。)
密切相关的问题
this.setState
即使新state
值与以前的值相同,类中的组件总是会导致重新渲染,这是否正确?- 它是正确的,在功能部件与钩,
setState
从useState
只能导致重新绘制,如果state
值与前值不同? - 在类组件的方法内部设置
state
with 和this.setState
在函数组件的函数体内部设置带钩子一样吗?render
state
- 以下是否正确?
- 在类组件中,如果我们
state
在render
方法中设置,就会发生无限循环。这是因为class 组件并不关心 newstate
是否与之前的相同state
。它只是在每个this.setState
. - 然而,在带有钩子的函数组件中,
state
函数体内的设置(render
与类组件中的方法类似地在重新渲染时运行)不会成为问题,因为函数组件只是在看到state
与前一个相同state
。
- 在类组件中,如果我们