4.基础教程-使用数据

本文最后更新于:2023年12月5日 晚上

注意

如果 action 需要包含唯一 ID 或其他一些随机值,请始终先生成该随机值并将其放入 action 对象中。

Reducer 中永远不应该计算随机值,因为这会使结果不可预测。

解释:深入理解 redux 之 reducer 为什么是纯函数

不得修改传入的参数

以下是修改传入参数的示例:

const params = { a: 1 }
function log(params) {
 console.log(params)
}
log(params) // {a: 1}
params.a = 2
log(params) // {a: 2}

不得调用非纯函数

redux 的核心提供可预测化的状态管理,即无论何时特定的 action 触发的行为永远保持一致,试想如果 reducer 中有 Date.now()等非纯函数,即使同样的 action,那么 reducer 处理过程中也是有所不同的,不再能保证可预测性。

执行有副作用的操作

同样,副作用的操作也会带来不可预测性。

api 请求该如何执行

显然 api 操作是不可避免的,因为总要向后台请求数据,那么 api 请求应该如何做呢?这里有两个办法:

  • 在 dispatch 方法之前进行 api 请求:在 dispatch 之外先进行 api 异步请求,当收到请求结果后,根据结果的不同选择 dispatch 不同的 action;
  • 应用 redux-thunk、redux-promise 等中间件,就可以在 dispatch 函数中直接执行 api 请求等异步操作了。

总结

Redux action creators 可以使用一个正确的内容模板去构造(prepare)action 对象

  • createSlicecreateAction 可以接受一个返回 action payload 的 “prepare callback”
  • 诸如唯一的 ID 和一些随机值应该放在 action 里,而不是在 reducer 中去计算

Reducers 内(仅)应该包含 state 的更新逻辑

  • Reducers 内可以包含计算新 state 所需的任意逻辑
  • Action 对象内应该包含足够描述即将发生什么事的信息

4.基础教程-使用数据
http://blog.lujinkai.cn/前端/React/redux/4.基础教程-使用数据/
作者
像方便面一样的男子
发布于
2023年5月29日
更新于
2023年12月5日
许可协议