generative-ai-for-beginners 第 12 课实战:为生成式 AI 应用设计可信、协作与包容的用户体验
2026/9/7 6:10:36
核心定位:页面级的“服务端状态”管理 (Server State)
RR7 引入了类似 Remix 的架构(Loaders & Actions),它将数据获取与路由生命周期紧密绑定。
loader),并在提交表单时处理数据变更 (action)。params或searchParams)。<Suspense>和errorElement,代码非常整洁。结论:如果数据是**“为了展示某个页面而从后端获取的”**,优先使用 React Router v7 的
loader。
核心定位:低频更新的“全局依赖注入” (Dependency Injection)
Context 是 React 原生提供的跨组件传值方式,但它不是一个“状态管理库”,而是一个“数据传输管道”。
Provider,底层组件消费数据。当 Context Value 变化时,所有消费该 Context 的组件都会强制重新渲染。Compound Component(复合组件,如 Tabs 或 Accordion)内部共享状态。结论:仅用于全局静态配置或极低频更新的全局状态。不要把它当 Redux 用。
核心定位:高频、复杂的“客户端状态”管理 (Client State)
现代 Redux (RTK) 已经大大简化了写法,它依然是处理复杂交互王道。
useSelector,只有相关数据变化时组件才渲染,性能极高。结论:当应用交互复杂,且状态不依赖于 URL,或者需要在非父子组件间高频同步时使用。
在现代 React 开发中,通常不是“三选一”,而是“组合拳”。
我建议的混合架构策略如下:
| 数据类型 | 推荐方案 | 理由 |
|---|---|---|
| 页面初始化数据(列表、详情) | React Router v7 (Loader) | 路由即数据边界,自动处理 Fetch/Error/Loading,体验最好。 |
| 全局配置(主题、语言、用户信息) | Context | 数据几乎不变,Context 是最轻量的解法。 |
| 复杂交互状态(购物车、复杂表单、播放器) | Redux (RTK) | 需要精细的性能控制和复杂的状态逻辑拆分。 |
| 简单的组件间传值 | Props / Composition | 别忘了最基础的 Props,有时不需要任何库。 |
假设你要做一个“电商后台管理系统”:
loader。进入/products路由时直接加载数据,URL 参数?page=2直接驱动数据刷新。action提交。“能用 URL 解决的,绝不用 Store。”