跳到主要内容

 

开始使用 Redux Toolkit

目的

Redux Toolkit 包旨在成为编写 Redux 逻辑的标准方式。它最初是为了解决 Redux 的三个常见问题而创建的:

  • "配置 Redux 商店太复杂"
  • "我必须添加很多包才能让 Redux 做出有用的事情"
  • "Redux 需要太多样板代码"

我们不能解决每一个用例,但是在 create-react-app 的精神下,我们可以尝试提供一些工具,这些工具可以抽象出设置过程并处理最常见的用例,同时还包括一些有用的实用程序,这将让用户简化他们的应用程序代码。

Redux Toolkit 还包括一个我们称之为 "RTK Query" 的强大的数据获取和缓存能力。它作为一组独立的入口点包含在包中。它是可选的,但可以消除手动编写数据获取逻辑的需要。

这些工具应该对所有 Redux 用户有益。无论你是一个全新的 Redux 用户正在设置你的第一个项目,还是一个有经验的用户想要简化现有的应用程序,Redux Toolkit 都可以帮助你改进你的 Redux 代码。

安装

创建一个 React Redux 应用

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

这两者都已经为该构建工具适当地配置了 Redux Toolkit 和 React-Redux,并附带了一个小示例应用,演示了如何使用 Redux Toolkit 的几个特性。

# 使用我们的 Redux+TS 模板的 Vite
# (使用 `degit` 工具克隆和提取模板)
npx degit reduxjs/redux-templates/packages/vite-template-redux my-app

# 使用 `with-redux` 模板的 Next.js
npx create-next-app --example with-redux my-app

我们目前没有官方的 React Native 模板,但推荐这些模板用于标准的 React Native 和 Expo:

已有的应用

Redux Toolkit 可以在 NPM 上作为一个包使用,用于模块打包器或在 Node 应用中:

npm install @reduxjs/toolkit

如果你需要 React 绑定:

npm install react-redux

该包包括一个预编译的 ESM 构建,可以直接在浏览器中作为 <script type="module"> 标签使用。

包含内容

Redux Toolkit 包含以下 API:

  • configureStore():包装 createStore 以提供简化的配置选项和良好的默认值。它可以自动组合你的 slice reducers,添加你提供的任何 Redux 中间件,默认包含 redux-thunk,并启用 Redux DevTools Extension 的使用。
  • createReducer():让你提供一个动作类型到 case reducer 函数的查找表,而不是编写 switch 语句。此外,它自动使用 immer 让你用正常的可变代码编写更简单的不可变更新,比如 state.todos[3].completed = true
  • createAction():为给定的动作类型字符串生成一个动作创建函数。
  • createSlice():接受一个 reducer 函数的对象,一个 slice 名称,和一个初始状态值,并自动生成一个带有对应动作创建者和动作类型的 slice reducer。
  • combineSlices():将多个 slices 组合成一个单一的 reducer,并允许在初始化后"懒加载" slices。
  • createAsyncThunk:接受一个动作类型字符串和一个返回 promise 的函数,并生成一个基于该 promise 分发 pending/fulfilled/rejected 动作类型的 thunk。
  • createEntityAdapter:生成一组可重用的 reducers 和 selectors,用于管理存储中的规范化数据。
  • 来自 Reselect 库的 createSelector 实用程序,重新导出以便于使用。

RTK 查询

RTK 查询 是作为 @reduxjs/toolkit 包内的可选插件提供的。它专为解决数据获取和缓存的用例而构建,为你的应用提供一个定义 API 接口层的紧凑而强大的工具集。它旨在简化在 web 应用中加载数据的常见情况,消除手动编写数据获取和缓存逻辑的需要。

RTK 查询基于 Redux Toolkit 核心进行构建,内部使用 Redux 作为其架构。虽然使用 RTK 查询不需要了解 Redux 和 RTK,但你应该探索它们提供的所有额外的全局存储管理能力,以及安装 Redux DevTools 浏览器扩展,它与 RTK 查询完美配合,可以遍历和重播你的请求和缓存行为的时间线。

RTK 查询包含在核心 Redux Toolkit 包的安装中。它可以通过以下两个入口点之一使用:

import { createApi } from '@reduxjs/toolkit/query'

/* React 特定的入口点,自动生成对应于定义的端点的钩子 */
import { createApi } from '@reduxjs/toolkit/query/react'

包含内容

RTK 查询包括以下 API:

  • createApi():RTK 查询功能的核心。它允许你定义一组端点,并描述如何从一系列端点检索数据,包括如何获取和转换该数据的配置。在大多数情况下,你应该每个应用使用一次,以"每个基础 URL 一个 API slice"为经验法则。
  • fetchBaseQuery():围绕 fetch 的小包装器,旨在简化请求。作为 createApi 中大多数用户使用的推荐 baseQuery
  • <ApiProvider />:如果你还没有 Redux 存储,可以作为 Provider 使用。
  • setupListeners():用于启用 refetchOnMountrefetchOnReconnect 行为的实用程序。

查看 RTK 查询概述 页面以获取有关 RTK 查询是什么,解决了什么问题以及如何使用它的更多详细信息。

学习 Redux

我们有各种资源可供你学习 Redux。

Redux 基础教程

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

Redux 基础教程

Redux 基础教程 是一个"自下而上"的教程,从第一原则和没有任何抽象的情况下教授"Redux 如何工作",以及为什么存在标准的 Redux 使用模式。

学习现代 Redux 直播

Redux 维护者 Mark Erikson 出现在 "Learn with Jason" 节目中,解释我们今天推荐如何使用 Redux。该节目包括一个现场编码的示例应用,展示如何使用 Redux Toolkit 和 React-Redux 钩子与 Typescript,以及新的 RTK 查询数据获取 API。

查看 “学习现代 Redux”节目笔记页面 以获取成绩单和示例应用源的链接。

帮助和讨论

#redux 频道 是我们的官方资源,用于所有与学习和使用 Redux 相关的问题。Reactiflux 是一个很好的地方,可以挂出,提问和学习 - 加入我们吧!

你也可以在 Stack Overflow 上使用 #redux 标签 提问。