React useState无限重渲染疑问:相同值setState是否触发重渲染?
问题解答
1. 设置状态与当前值相同时,React是否触发重渲染?
对于数字、字符串这类基本类型,如果新状态和当前状态值完全一致,React默认不会触发重渲染——它会通过浅比较判断状态是否真的变化。但有个关键例外:如果是在组件渲染阶段(比如组件函数体直接执行代码时)调用状态更新函数,哪怕状态值没变化,React也会强制触发一次重渲染。
2. 示例代码为何导致无限重渲染?
你贴的代码里,setCount(1)直接写在组件函数体内,意味着组件每次渲染都会执行这个调用:
- 第一次渲染:组件初始化,
count是1,执行setCount(1)。虽然新值和当前值相同,但因为是在渲染阶段触发的更新,React会调度组件重新渲染。 - 第二次渲染:组件再次执行,
count还是1,又会执行setCount(1),再次触发重渲染。 - 这个循环会一直重复,最终导致无限重渲染。
注意:这种在渲染逻辑里直接调用状态更新的写法是严重错误,实际开发中绝对不能这么用,会引发性能问题甚至页面崩溃。
内容的提问来源于stack exchange,提问作者Dude
相关产品推荐
相关产品推荐

