You need to enable JavaScript to run this app. React类组件setState后this.state与初始引用不等的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

React类组件setState后this.state与初始引用不等的问题咨询

问题原因解答
  • 你对setState的合并逻辑存在误解:它的合并指的是对state的属性做浅合并,而非直接修改原state对象。
  • React类组件执行setState更新时,内部会创建全新的state对象,不会修改constructor中初始化的原始state对象。你在构造函数中将this.ref指向了初始state对象,该对象后续永远不会被改动,因此this.ref会一直指向count为0的初始对象,和更新后的this.state自然不是同一个引用。
  • 浅合并的具体逻辑是:React会将你传入setState的对象和旧state做浅拷贝合并,生成新对象赋值给this.state,未被修改的属性会直接复用旧state中的引用,这也是你测试中this.state.names === this.ref.names始终返回true的原因——names属性没有被修改,它的引用被直接复用到了新的state对象中。
  • 这个设计是React故意为之:保证state的不可变性,既方便React做状态变更前后的对比,也能避免直接修改状态带来的各类隐性bug,这也是官方要求必须通过setState更新状态、禁止直接修改this.state的核心原因。

内容的提问来源于stack exchange,提问作者Vegeta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 01:06:06