Redux用于可预测和可维护的全局状态管理的JS库

Redux


Redux 是一个用于可预测且可维护的全局状态管理的 JS 库。

它可以帮助您编写行为一致、可在不同环境(客户端、服务器和原生环境)中运行且易于测试的应用程序。此外,它还提供卓越的开发者体验,例如实时代码编辑与时间旅行调试器 等。

您可以将 Redux 与 React 或任何其他视图库一起使用。Redux 核心非常小巧(2kB,包括依赖项),并且拥有丰富的插件生态系统。

Redux Toolkit 是我们官方推荐的编写 Redux 逻辑的方法。它封装了 Redux 核心,并包含我们认为构建 Redux 应用所必需的软件包和函数。Redux Toolkit 内置了我们建议的最佳实践,简化了大多数 Redux 任务,避免了常见错误,并使编写 Redux 应用程序变得更加轻松。

安装

创建 React Redux 应用

推荐使用 React 和 Redux Toolkit 构建新应用的方式是使用我们官方的 Vite Redux Toolkit + TS 模板,或者使用 Next 的 with-redux 模板 创建一个 Next.js 项目。

以上两种方式都已针对该构建工具正确配置了 Redux Toolkit 和 React-Redux,并附带一个小示例应用,演示了如何使用 Redux Toolkit 的多项功能。

bash 复制代码
# Vite with our Redux+TS template
# (using the `degit` tool to clone and extract the template)
npx degit reduxjs/redux-templates/packages/vite-template-redux my-app

# Next.js using the `with-redux` template
npx create-next-app --example with-redux my-app

我们目前没有官方的 React Native 模板,但推荐使用以下标准 React Native 和 Expo 模板:

复制代码
npm install @reduxjs/toolkit react-redux

Redux 核心库本身:

复制代码
npm install redux

更多详情,请参阅安装文档页面

文档

Redux 核心文档位于 https://redux.js.org,其中包含完整的 Redux 教程以及常规 Redux 模式的使用指南:

Redux Toolkit 文档位于 https://redux-toolkit.js.org,其中包含 Redux Toolkit 中所有 API 的 API 参考和使用指南。

学习 Redux

Redux 基础教程

Redux 基础教程 是一个“自上而下”的教程,讲解如何正确使用 Redux,并使用我们最新推荐的 API 和最佳实践。我们建议从这里开始学习。

Redux 基础教程

Redux 基础教程 是一个“自下而上”的教程,讲解 Redux 的工作原理,从基本原理出发,不包含任何抽象,并解释 Redux 标准使用模式的存在原因。

帮助与讨论

Reactiflux Discord 社区#redux 频道 是我们所有关于学习和使用 Redux 问题的官方资源。Reactiflux 是一个交流、提问和学习的好地方——欢迎加入我们!

继续之前

Redux 是组织状态的有效工具,但您也应该考虑它是否适合您的情况。请不要仅仅因为有人说您应该使用 Redux 就使用它——相反,请花一些时间了解使用它的潜在优势和利弊。

以下是一些关于何时使用 Redux 的建议:

  • 您有适量的数据会随时间变化
  • 您需要一个单一的、可靠的状态数据源
  • 您发现将所有状态保存在顶级组件中已不再足够

是的,这些指导原则是主观且模糊的,但这是有充分理由的。对于每个用户和每个应用程序来说,将 Redux 集成到应用程序中的时机都是不同的。

有关如何使用 Redux 的更多思考,请参阅:

基本示例

应用的整个全局状态存储在单个 store 内的对象树中。
更改状态树的唯一方法是创建一个 action(一个描述发生事件的对象),并将其 dispatch 到 store。
要指定如何响应 action 更新状态,您可以编写纯 reducer 函数,该函数根据旧状态和 action 计算新状态。

Redux Toolkit 简化了编写 Redux 逻辑和设置 store 的过程。使用 Redux Toolkit,基本应用逻辑如下所示:

js 复制代码
import { createSlice, configureStore } from '@reduxjs/toolkit'

const counterSlice = createSlice({
  name: 'counter',
  initialState: {
    value: 0
  },
  reducers: {
    incremented: state => {
      // Redux Toolkit allows us to write "mutating" logic in reducers. It
      // doesn't actually mutate the state because it uses the Immer library,
      // which detects changes to a "draft state" and produces a brand new
      // immutable state based off those changes
      state.value += 1
    },
    decremented: state => {
      state.value -= 1
    }
  }
})

export const { incremented, decremented } = counterSlice.actions

const store = configureStore({
  reducer: counterSlice.reducer
})

// Can still subscribe to the store
store.subscribe(() => console.log(store.getState()))

// Still pass action objects to `dispatch`, but they're created for us
store.dispatch(incremented())
// {value: 1}
store.dispatch(incremented())
// {value: 2}
store.dispatch(decremented())
// {value: 1}

Redux Toolkit 使我们能够编写更简洁、更易读的逻辑,同时仍然遵循 Redux 的原始核心行为和数据流。

您可以在 GitHub 上找到官方 Logo。

变更日志

本项目遵循 语义化版本控制
每个版本以及迁移说明均记录在 GitHub 发布 页面上。

许可证

MIT

关于项目

Redux 是一个用于可预测和可维护的全局状态管理的 JS 库,可帮助您编写行为一致、在不同环境(客户端、服务器和本机)中运行且易于测试的应用程序。
MIT
Typescript
61,359
15191
1256
2015-05-30
2025-09-15

增长趋势 - stars