首页 > 解决方案 > 为什么 useEffect 外部的函数会被调用,而 useEffect 内部没有依赖数组的函数却不会?

问题描述

直到今天,我还认为没有依赖数组的 useEffect 内的代码和 useEffect 外的代码都会在每次重新渲染时触发,但后来我发现了这种奇怪的情况,我不明白为什么会发生这种情况。

示例中,第一次单击按钮时,它会触发 setState 到不同的值,因此它会重新渲染并调用两个 console.log,但第二次单击按钮时,会使用相同的值调用 setState,仍然是外部console.log 被调用,但 useEffect 中的 console.log 没有......为什么?这不是完全重新渲染吗?如何在不再次触发 useEffect 的情况下重新评估组件?

下次单击该按钮时,什么也没有发生,因为使用相同的值调用 setState 不会触发重新渲染,但第一次会发生我不明白的奇怪的半渲染事情。

提前致谢。

标签: reactjsreact-hooksuse-effectuse-statererender

解决方案


我会回答我的问题:

这种行为实际上在官方文档中进行了解释,无需担心,因为它不是“真正的”渲染。

这是相关部分:

如果您将 State Hook 更新为与当前状态相同的值,React 将退出而不渲染子级或触发效果。[...]

所以基本上 React 会评估这个函数,所以外部的 console.log 会被调用,但是它只是在没有重新渲染孩子或触发 useEffect 的情况下退出


推荐阅读