为何该代码片段中count=1时未触发React.useEffect?
为什么count=1时useEffect没触发?
咱们一步步拆解这个问题:
你的useEffect依赖项是[count < 2],这是个返回布尔值的表达式,React判断是否执行effect的逻辑是浅比较依赖项数组的前后值,具体过程如下:
- 初始渲染:count=0,
count < 2结果为true,effect执行,输出ran effect 0。 - 第一次点击按钮:count变成1,
count < 2结果还是true。因为前后依赖项都是true,没有发生变化,所以React不会重新执行effect——这就是你看不到count=1对应日志的原因。 - 第二次点击:count变成2,
count < 2结果变成false,依赖项从true变为false,发生了变化,所以effect执行,输出ran effect 2。 - 后续点击:count大于2,
count < 2一直是false,依赖项不再变化,effect也就不再触发。
而当你把依赖项改成[count]时,每次count变化(0→1→2→3...),依赖项的数值都不一样,所以每次都会触发effect,自然能看到count=1的日志。
解决方案
如果你想在count每次变化时都触发effect,直接把count作为依赖项即可:
React.useEffect(() => { console.log("ran effect", count) }, [count])
内容的提问来源于stack exchange,提问作者TheBen
相关产品推荐
相关产品推荐

