库 / SDK
reduxjs/redux avatar
reduxjs/redux

Redux 5.0 评估:核心库依然克制,但官方路线已经转向 Redux Toolkit

用于可预测的全局状态管理的 JS 库。您可以将 Redux 与 React 或任何其他视图库一起使用。

61,486 个 Star15,177 个 ForkTypeScriptMIT

秒懂

它是什么?
Redux 是 JavaScript 全局状态管理的经典方案,核心库仅 2kB,强调可预测性与可测试性。本文基于 v5.0.1 的仓库与文档,分析其数据流机制、安装路径、适用边界,以及为什么官方现在推荐你优先使用 Redux Toolkit。
适合谁用?
如果你的应用确实需要全局状态、且多个组件共享同一份数据,同时你愿意接受单向数据流的约束,Redux 5.0 仍然是一个可靠的选择。但请注意,官方文档已经明确把 Redux Toolkit 作为推荐写法,直接使用核心库意味着你要自己处理 action 创建、不可变更新和样板代码。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 7 天前。
用什么语言写的?
主要是 TypeScript(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。

开源项目深度解析

一个 2kB 的全局状态容器,解决什么问题

Redux 解决的问题很具体:当应用里多个不相关的组件需要读写同一份数据时,把状态放在某个顶层组件里会变得难以维护。Redux 把整个应用的状态放进一个单一 store,用 action 描述发生了什么,用纯函数 reducer 计算新状态。这种设计让状态变化可追踪、可回放,也方便测试。它的适用对象是那些数据量合理、变化频繁、且确实需要一个单一真相来源的应用。README 里明确提醒,不要因为别人说该用就用,它列出了三条判断标准:有合理数量的数据随时间变化、需要单一真相来源、顶层组件已经装不下所有状态。这三条标准主观且模糊,但至少给出了一个思考框架。对于只有几个组件、状态不共享的小项目,Redux 是多余的负担。

单向数据流:dispatch、action、reducer 的固定路线

Redux 的核心机制是一条强制性的单向数据流。状态树只存在于 store 中,你无法直接修改它。要改变状态,你必须创建一个 action,那是一个普通对象,描述发生了什么,然后调用 dispatch 把它交给 store。store 会把当前状态和这个 action 一起传给 reducer,reducer 是一个纯函数,它根据旧状态和 action 计算出新状态。整个过程没有例外,没有捷径。这个约束是 Redux 可预测性的来源,也是它的学习成本所在。很多新手会问,为什么不能直接改 state?因为直接修改会破坏时间旅行调试和状态回溯的能力。Redux 的文档把 action 描述为“唯一改变状态树的方式”,这个“唯一”是它与其他状态管理方案最本质的区别。

安装与启动:从模板到裸核心库的路径

安装 Redux 本身很简单,一条命令就够了:npm install redux。但官方推荐的起点不是这个。README 给出的首选方案是用 Redux Toolkit 加 React 的模板,通过 npx degit reduxjs/redux-templates/packages/vite-template-redux my-app 创建 Vite 项目,或者用 npx create-next-app --example with-redux my-app 创建 Next.js 项目。这两个模板已经配置好了 Redux Toolkit 和 React-Redux。如果你要手动搭建,安装 @reduxjs/toolkit 和 react-redux 是常规做法。注意,Redux 核心库不依赖 React,它可以在任何视图库甚至非浏览器环境运行,这是它的一个优势。但如果你只想用核心库,你需要自己处理 store 的创建、中间件的接入,以及 React 组件的连接,这些工作 Redux Toolkit 都替你做了。

Redux Toolkit 是官方答案,但核心库依然是基础

README 明确写着 Redux Toolkit 是“官方推荐的编写 Redux 逻辑的方式”。Toolkit 封装了核心库,提供了 createSlice 和 configureStore 等 API。createSlice 允许你在 reducer 里写“看起来像可变”的代码,比如 state.value += 1,实际上它用 Immer 库检测对 draft state 的修改,然后生成一个新的不可变状态。这大大减少了样板代码。但要注意,Toolkit 并没有改变 Redux 的核心数据流,它只是简化了表达方式。configureStore 仍然会创建 store,dispatch 仍然需要 action,reducer 仍然是纯函数。如果你理解了核心库的原理,Toolkit 只是锦上添花;如果你直接学 Toolkit,你可能会错过底层机制,当遇到奇怪的行为时难以调试。官方提供了两套教程,Redux Essentials 是自上而下教 Toolkit 用法,Redux Fundamentals 是自下而上讲核心原理,前者适合快速上手,后者适合想真正理解的人。

局限性与误用场景:什么时候不该用 Redux

Redux 的文档自己列出了不适用的情况,这点值得肯定。如果你只是想在两个组件之间共享少量状态,用 React 自带的 useState 或 useReducer 就够了。如果应用没有复杂的状态流转,引入 Redux 只会增加文件数量和概念负担。另一个限制是 reducer 必须是纯函数,这意味着你不能在 reducer 里做异步操作、不能调用 Date.now() 或 Math.random(),因为每次调用结果都不同,会破坏状态的可预测性。异步逻辑必须通过中间件(如 thunk 或 saga)处理,这又增加了额外的依赖和学习成本。对于小型到中型的应用,这些约束可能显得过度设计。Redux 的 FAQ 和外部文章(如 You Might Not Need Redux)都在反复提醒这一点,这种自我克制的态度在开源项目里并不常见。

替代方案:对比 Zustand 或 React 内置状态

如果你觉得 Redux 的样板代码太多,Zustand 是一个常见的替代选择。Zustand 也提供全局 store,但它不需要 action 和 reducer 的强制结构,你可以直接修改状态,API 更简洁。它没有 Redux 那种严格的单向数据流,所以可预测性稍弱,但开发效率更高。另一个替代方案是 React 自带的 useReducer,它实现了与 Redux 类似的 reducer 模式,但作用范围仅限于组件局部,不需要额外安装库。对于只需要局部状态管理的场景,useReducer 比 Redux 轻得多。Redux 的定位是全局状态,而 useReducer 是组件状态,两者解决的问题不同。如果应用只有一个顶层组件需要传递状态,useReducer 可能就够了;如果多个不相关的组件需要共享同一份数据,Redux 或 Zustand 才值得考虑。

版本与维护:v5.0.1 的状态和许可证

Redux 的最近一次发布是 v5.0.1,时间是 2023 年 12 月 23 日,距离 v5.0.0 正式版不到三周。v5.0.0 是主版本号升级,意味着有破坏性变更,官方把迁移说明放在 GitHub Releases 页面。项目采用语义化版本控制,遵循 SemVer。许可证是 MIT,这意味着你可以自由使用、修改和分发,包括商业用途,只要保留版权声明。仓库默认分支是 master,没有归档,说明项目仍在维护。但核心库本身已经很稳定,v4 到 v5 的变更主要集中在 TypeScript 类型定义和内部实现上,对于大多数使用 Redux Toolkit 的开发者,可能感觉不到太大差异。维护成本方面,Redux 核心代码量小,升级通常不复杂,但如果你使用了大量第三方中间件,需要确认它们是否兼容 v5。

编辑结论

如果你的应用确实需要全局状态、且多个组件共享同一份数据,同时你愿意接受单向数据流的约束,Redux 5.0 仍然是一个可靠的选择。但请注意,官方文档已经明确把 Redux Toolkit 作为推荐写法,直接使用核心库意味着你要自己处理 action 创建、不可变更新和样板代码。不需要全局状态的小型应用、或者只想用组件内 state 解决的项目,不应该引入 Redux。在决定采用之前,先确认你的团队能接受 reducer 的纯函数约束,并检查 v4 到 v5 的迁移指南,特别是 TypeScript 类型定义的变化。如果你想要更少的模板代码,优先考虑 Redux Toolkit,而不是裸 Redux。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记