React组件状态值未变化时是否不会重渲染?附案例疑问
当新状态值与旧状态值相同时,React组件是否不会重新渲染?
是的,这是React默认的性能优化逻辑:当你通过useState的更新函数(或类组件的setState)设置的新状态值与当前状态值完全相等时,React会跳过组件的重渲染流程。
你的案例具体原因分析
在你的代码里,count的初始值是1,每次点击按钮调用setCount(1)时,传入的新值和当前count的旧值完全一致。React会对新旧状态做浅比较:
- 对于数字、字符串这类基本数据类型,浅比较就是直接对比值是否相等
- 当检测到值没有变化时,React会判定组件不需要更新,因此不会触发重渲染。所以控制台只会在组件首次挂载时输出一次
Rendered,后续点击按钮都不会再输出该日志;而clicked会每次都输出,因为这是按钮点击事件里的同步执行代码,和组件渲染逻辑无关。
补充说明(引用类型的情况)
如果状态是对象、数组这类引用类型,即使新旧状态的内容完全一样,但引用地址不同,React还是会触发重渲染。比如:
const [obj, setObj] = React.useState({ num: 1 }); // 每次调用都会生成新对象,即使内容相同,组件会重渲染 setObj({ num: 1 });
内容的提问来源于stack exchange,提问作者Karan Guleria
相关产品推荐
相关产品推荐

