React Academy · 课时

选择合适的状态位置

应用决策框架:本地状态、提升后的状态或全局状态。

第 4 / 4 课13 个步骤

选择合适的状态位置 是 CoddyKit 上的免费 React Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。

欢迎

在本课中,您将学习一个实用的决策框架,用于判断状态应放在单个组件、共同祖先、React 上下文还是全局状态库中。

第 1 步:谁使用这个状态

首先请思考:哪些组件会使用这个状态进行渲染?请列出它们。如果只有一个组件使用它,就将状态保留在该组件中。

局部状态

恰好由一个组件使用的状态应与 useState 一起存放在该组件中。例如:下拉菜单是否打开、受控输入框的当前值、提示框是否可见。
function Toggle() {
  const [on, setOn] = useState(false);
  return <button onClick={() => setOn(!on)}>{on ? 'On' : 'Off'}</button>;
}

第 2 步:找到共同祖先

如果多个组件需要该状态,请在组件树中找到它们最近的共同祖先。将状态移到那里,再通过属性向下传递。

提升的状态(2~3 层)

由处于相同嵌套层级的 2~3 个组件共享的状态,很适合进行提升。共同的父组件拥有该状态,并通过属性将它逐层传递下来。

第 3 步:属性逐层传递是否过深

如果共同祖先位于使用方上方 4 层或更多层,通过中间组件传递属性就会产生多余的干扰。请考虑使用上下文。

上下文状态

对于许多组件都需要的横切关注点,请使用上下文,例如当前已认证用户、当前主题、选定的区域设置。这些数据很少变化,但使用方很多。

第 4 步:状态是否复杂或需要跨页面共享

如果状态具有复杂的更新逻辑、需要撤销/重做、必须在导航过程中持续存在,或需要在完全分离的组件树中访问,请使用专用状态库(Zustand、Redux)。

服务器状态有所不同

从服务器获取的数据属于*服务器状态*,而不是界面状态。请不要将它存储在 useState 或全局存储中,而应使用 React Query、SWR 或 RTK Query;它们会自动处理缓存、重新获取和错误状态。

决策流程图

1 个使用方 → 局部 useState。处于相近深度的 2~3 个使用方 → 提升到父组件。逐层传递 4 层或更多层 → 上下文。逻辑复杂或跨组件树 → Zustand/Redux。服务器数据 → React Query/SWR。

快速检查

对于大型应用中许多组件都需要访问的当前已认证用户,最适合将状态放在哪里?

回顾

根据使用方选择状态存放位置:一个使用方使用局部状态,附近的少数使用方使用提升的状态,跨多个层级的许多使用方使用上下文,复杂或跨组件树的状态使用状态库,服务器数据使用 React Query。

课程完成

恭喜您!您已完成**提升状态与属性逐层传递方案**。现在,您已经拥有一个清晰的框架,可以判断状态应存放在哪里,以及如何正确共享状态。
免费开始

用 AI 导师学习 React — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
88
课程
324

常见问题解答

「选择合适的状态位置」课时是免费的吗?

是的 — 「选择合适的状态位置」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。

「选择合适的状态位置」这节课中我会学到什么?

应用决策框架:本地状态、提升后的状态或全局状态。 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 React Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「选择合适的状态位置」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 React Academy 课中编写并运行代码吗?

能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 向上提升状态:原则与示例
  2. Prop 逐层传递:何时有害,何时适用
  3. 兄弟组件通信模式
  4. 选择合适的状态位置
← 返回 React Academy