发布于 2026-01-05 1 阅读
0

十步学会 redux-toolkit

十步学会 redux-toolkit

这篇文章最初是以推文串的形式发布的:https://twitter.com/chrisachard/status/1338507383765684224

如果你现在正在使用 Redux,你应该使用 redux-toolkit。

以下是使用 redux-toolkit 的 10 个步骤👇

1.

使用“configureStore”创建一个“store”。

一个存储库保存着您的所有数据以及更改这些数据的操作。

使用“提供程序”组件(例如 context)将 store 提供给所有组件。

Provider 将 store 提供给应用程序中其下的任何组件。configureStore 还可以配置中间件和增强器。

所有数据以及更新这些数据的操作。分为多个切片。提供程序下的所有组件都可以访问存储中的任何数据或操作。

2.

创建命名“切片”

切片保存状态的一部分,以及可以更新该状态的函数。

再也不用为了编写一个操作而修改 4 个不同的文件了!🎉

每个切片都有一个名称。状态可以包含任何你想要的序列化数据(字符串、对象、数组等)。Reducer 会自动创建 action,无需为了一个 action 而创建 4 个不同的文件!

3.

将切片添加到您的商店中,方法是将切片中的“减量器”添加到商店中的“减量器”中。

当您在切片中定义“reducers:”(复数)时,会自动创建切片“.reducer”(单数)。

指定 reducer 名称(与切片名称相同)。通过向对象添加多个键来添加多个切片。每个切片都有一个

4.

用于更新切片状态的函数称为“reducer”。

reducer 接收当前状态和要执行的操作(数据),

并更新切片状态下的数据

(redux-toolkit 使用了 immer,所以这些状态变化实际上是非突变性的)

Reducer 是接收当前状态并对其进行修改的函数。这看起来像是变更状态,但由于 redux-toolkit 使用了 immer,所以实际上是非变更状态。此 reducers 对象中的函数会自动导出为

5.

要在组件中从 store 中获取值,请使用“选择器”。

选择器函数接收整个 Redux store,并仅返回你想要的数据。

将你的选择器传递给“useSelector”钩子,它会自动调用该钩子。

你可以在 Provider 组件下的任何组件树中使用 useSelector。它会访问整个 Redux store。访问你指定的切片。从该切片中获取任何值。然后像在 JSX 中一样使用该值。

6.

要更改存储中的数据,请使用从切片导出的“操作”。

这些操作的名称基于您命名的 reducer。

但是你不能直接调用它们,因为它们需要当前状态和操作参数。

actions 是根据 slice 中的 reducer 创建的。actions 是函数,但不要直接调用它们——它们必须通过 dispatch 来分发。

7.

要发起行动,你需要将其“派遣”到商店。

使用“useDispatch”钩子来访问“dispatch”函数

然后使用该函数来分发你的操作。

这将使用“useSelector”自动更新所有组件。

useDispatch 可以用于 Provider 下的任何组件。dispatch 是一个函数,它接收调用你的 action 函数的结果。请确保调用你的 action 函数!然后,onClick 事件会触发 dispatch 操作。

计数器正在计数

8.

Action 也可以接受参数,这些参数作为第二个参数传递给 reducer。

操作“有效载荷”将包含传递给该操作的任何内容。

(要传递多个参数,请使用对象)

分发的操作会作为 reducer 函数的第二个参数传递。操作的有效负载包含传递给操作函数的参数。

你的动作现在可以接受参数,并将这些值传递给 reducer。

计数器以 1 和 5 为单位上下移动

9.

对于异步操作(例如获取数据),您可以使用 redux-thunk(已包含!)

创建一个 thunk(返回函数的函数)

它是异步的,并且会接收一个 dispatch 参数。

在你的 thunk 函数内部进行调度

然后像往常一样在组件中分发该操作

thunk 是一个返回函数的函数。返回的函数会立即被调用,并将 dispatch 作为参数传递给它。执行异步操作,例如数据获取。然后在数据准备就绪后进行 dispatch。

然后,你的“砰”一声就可以像其他任何动作一样被执行了!

计数器先加 1,然后再加本地主机返回的文本长度。

10.

如果直接使用 Context 呢?

是的,我通常只根据项目背景来启动项目,但对于大型项目或团队来说,Redux 可能有一些优势:

  • 它提供了上下文所不具备的结构。
  • 更容易测试
  • Redux 开发工具真是太棒了💯

资源

此示例的代码:
https://github.com/chrisachard/redux-toolkit-example

redux-toolkit 快速入门文档:
https://redux-toolkit.js.org/introduction/quick-start

Redux 开发者工具 Chrome 扩展程序:
https://github.com/zalmoxisus/redux-devtools-extension

现任 Redux 维护者和众多链接的保管者:
https://twitter.com/acemarke

喜欢这篇文章吗?

快来关注我的推特吧!我会在那里发布软件开发技巧和话题:https://twitter.com/chrisachard 🙌

文章来源:https://dev.to/chrisachard/learn-redux-toolkit-in-10-steps-2g88