什么是 Redux Toolkit?
Redux Toolkit 是我们官方的、有见地的、包含电池的工具集,用于高效的 Redux 开发。它旨在成为编写 Redux 逻辑的标准方式,我们强烈建议您使用它。
它包含几个实用程序函数,简化了最常见的 Redux 用例,包括商店设置、定义 reducer、不可变更新逻辑,甚至一次创建整个“状态切片”,而无需手动编写任何 action creator 或 action type。它还包含最广泛使用的 Redux 附加组件,例如用于异步逻辑的 Redux Thunk 和用于编写选择器函数的 Reselect,以便您可以立即使用它们。
安装
Redux Toolkit 作为 NPM 上的包提供,可用于模块捆绑器或 Node 应用程序
# NPM
npm install @reduxjs/toolkit
# Yarn
yarn add @reduxjs/toolkit
目的
Redux 核心库有意保持中立。它允许你决定如何处理所有事情,例如商店设置、状态内容以及如何构建 reducer。
在某些情况下,这很好,因为它提供了灵活性,但这种灵活性并不总是必要的。有时我们只需要最简单的方法来开始,并获得一些开箱即用的良好默认行为。或者,也许你正在编写一个更大的应用程序,发现自己编写了一些类似的代码,并且希望减少手动编写这些代码的数量。
Redux Toolkit 最初是为了解决有关 Redux 的三个常见问题而创建的
- "配置 Redux 商店太复杂了"
- "我必须添加很多包才能让 Redux 做任何有用的事情"
- "Redux 需要太多样板代码"
我们无法解决所有用例,但本着 create-react-app
和 apollo-boost
的精神,我们可以提供一套官方推荐的工具,这些工具可以处理最常见的用例,并减少做出额外决定的需要。
为什么你应该使用 Redux Toolkit
Redux Toolkit 通过将我们的推荐最佳实践融入其中、提供良好的默认行为、捕获错误并允许你编写更简单的代码,使编写良好的 Redux 应用程序变得更容易,并加快开发速度。Redux Toolkit 对所有 Redux 用户都有益,无论其技能水平或经验如何。它可以在新项目的开始添加,也可以用作现有项目中增量迁移的一部分。
请注意,你并不需要使用 Redux Toolkit 来使用 Redux。有许多现有的应用程序使用其他 Redux 包装库,或者手动编写所有 Redux 逻辑,如果你仍然更喜欢使用其他方法,那就继续吧!
但是,我们强烈建议对所有 Redux 应用程序使用 Redux Toolkit.
总的来说,无论你是刚接触 Redux 的用户,正在设置你的第一个项目,还是经验丰富的用户,想要简化现有应用程序,使用 Redux Toolkit 将使你的代码更好,更易于维护。
包含的内容
Redux Toolkit 包含
configureStore()
: 封装了createStore
,提供简化的配置选项和良好的默认值。它可以自动组合你的切片 reducer,添加你提供的任何 Redux 中间件,默认包含redux-thunk
,并启用 Redux DevTools Extension 的使用。createReducer()
: 允许你提供一个动作类型到 case reducer 函数的查找表,而不是编写 switch 语句。此外,它自动使用immer
库,让你可以使用正常的可变代码编写更简单的不可变更新,例如state.todos[3].completed = true
。createAction()
: 为给定的动作类型字符串生成一个动作创建器函数。该函数本身定义了toString()
,因此它可以代替类型常量使用。createSlice()
: 接受 reducer 函数对象、切片名称和初始状态值,并自动生成具有相应动作创建器和动作类型的切片 reducer。createAsyncThunk
: 接受动作类型字符串和返回 Promise 的函数,并生成一个 thunk,根据该 Promise 分派pending/fulfilled/rejected
动作类型。createEntityAdapter
: 生成一组可重用的 reducer 和 selector,用于管理存储中的规范化数据。- 来自 Reselect 库的
createSelector
工具,为了方便使用而重新导出。
Redux Toolkit 还提供了 RTK Query 数据获取 API。RTK Query 是一个专门为 Redux 打造的强大数据获取和缓存工具。它旨在简化 Web 应用程序中加载数据的常见情况,无需您手动编写数据获取和缓存逻辑。
文档
完整的 Redux Toolkit 文档可在 https://toolkit.redux.js.cn 上找到。