You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

组件local state为何会受global state变更影响?

问题原因及解决方案

核心原因

你把Local和Global组件定义在了MyApp组件内部,每次MyApp因为global状态更新触发重新渲染时,这两个组件函数都会被重新创建。

React判断两个组件是否为同一个实例,依赖的是组件的引用地址。当Local函数被重新定义后,它的引用和之前的旧组件完全不同,React会将其视为全新组件处理:

  • 先卸载之前已挂载的旧Local组件实例,该实例的local状态会被一并销毁
  • 然后挂载新的Local组件实例,新实例执行useState(0),local状态自然回到初始值0

修复方案

把Local和Global组件移到MyApp组件外部,这样它们的引用地址在MyApp重新渲染时不会改变,React就会保留原组件实例和对应的local状态。

修正后的代码:

// 将组件移到父组件外部
function Local() {
  const [local, setLocal] = useState(0)
  return (
    <button onClick={() => setLocal(1)} >
      {local}
    </button>
  )
}

function Global({ global, setGlobal }) {
  return (
    <button onClick={() => setGlobal(1)}>
      {global}
    </button>
  )
}

export default function MyApp() {
  const [global, setGlobal] = useState(0)

  return (
    <>
      <Local /> <Global global={global} setGlobal={setGlobal} />
    </>
  );
}

这样点击Global按钮更新全局状态时,Local组件的实例不会被销毁,local状态也就不会重置了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:35:07