如何在 reducer 之间共享 state?

简介: 如何在 reducer 之间共享 state?

如何在 reducer 之间共享 state?

 combineReducers(reducers)

reducers (Object): 一个对象,它的值(value)对应不同的 reducer 函数,这些 reducer 函数后面会被合并成一个。

随着应用变得越来越复杂,可以考虑将 reducer 函数拆分成多个单独的函数,拆分后的每个函数负责独立管理 state 的一部分。

rootReducer = combineReducers({potato: potatoReducer, tomato: tomatoReducer})
// rootReducer 将返回如下的 state 对象
{
  potato: {
    // 由 potatoReducer 管理的 state 对象 ...
  },
  tomato: {
    // 由 tomatoReducer 管理的 state 对象 ...
  }
}

那么问题来了,将 reducer 函数拆分成多个单独的函数,reducer 之间无法共享 state 怎么办呢?(由 potatoReducer 管理的 state 对象与由 tomatoReducer 管理的 state 对象,无法获取对方的 state 值)。首先最简单的办法是不要将 reducer 函数拆分成多个单独的函数,而是只使用一个 reducer 函数,就不会出现这个问题了。

标准的做法是使用 Redux Thunk 中间件。要引入 redux-thunk 这个专门的库才能使用。在 redux-thunk 的 异步 action 创建函数能通过 getState() 方法获取所有的 state。

export function fetchPostsIfNeeded(subreddit) {
  // 注意这个函数也接收了 getState() 方法
  // 它让你选择接下来 dispatch 什么。

  return (dispatch, getState) => {
    // todo...
  }
}

只需牢记 reducer 仅仅是函数,可以随心所欲的进行划分和组合,而且也推荐将其分解成更小、可复用的函数。

相关文章
|
11月前
|
存储 Kubernetes 调度
【赵渝强老师】K8s中Deployment控制器与StatefulSet控制器的区别
K8s中的Deployment控制器用于管理无状态应用程序,关注Pod数量、更新方式等;而StatefulSets控制器则管理有状态应用程序,提供持久存储和唯一标识符,适用于需要稳定网络标识符和持久化存储的场景。两者的主要区别在于是否维护状态和顺序。
363 0
|
Kubernetes 应用服务中间件 nginx
Kubernetes(k8s)容器编排Pod介绍和使用
Kubernetes(k8s)容器编排Pod介绍和使用
492 0
win10取消ie浏览器自动跳转edge浏览器
win10取消ie浏览器自动跳转edge浏览器
371 4
|
JSON 数据挖掘 数据格式
Pandas处理JSON文件read_json()一文详解+代码展示
Pandas处理JSON文件read_json()一文详解+代码展示
1908 0
Pandas处理JSON文件read_json()一文详解+代码展示
|
安全 Java 数据安全/隐私保护
如何解决security中异常UsernameNotFoundException总是抛出密码错误问题
如何解决security中异常UsernameNotFoundException总是抛出密码错误问题
475 0
使用vant制作一个视频播放的功能
使用vant制作一个视频播放的功能
370 0
|
Java 应用服务中间件 Maven
框架的优点(SpringBoot VS Servlet)
框架的优点(SpringBoot VS Servlet)
|
JavaScript 前端开发
介绍npm模块的安装机制,为什么输入npm install 就可以自动安装对应的模块?如何初始化?
介绍npm模块的安装机制,为什么输入npm install 就可以自动安装对应的模块?如何初始化?
251 0
|
SQL XML Java
记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故
记一次在mybatis中使用String字符串作为sql语句 in关键字 后面参数的事故
458 0