许多用户想在 reducer 之间共享数据,但是 combineReducers 不允许此种行为。有许多可用的办法,今天就一起讨论这个问题。

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 仅仅是函数,可以随心所欲的进行划分和组合,而且也推荐将其分解成更小、可复用的函数。

总结:如果一个 reducer 想获取其它 state 层的数据,往往意味着 state 树需要重构,需要让单独的 reducer 处理更多的数据。

如何在 reducer 之间共享 state?相关推荐

  1. 如何在iPhone之间共享您的Wi-Fi密码?

    现如今不管去哪里都离不开Wifi吧, 如果去朋友家做客, 想连接朋友家的Wifi但是朋友却想不起来密码怎么办? 如果你和你朋友用的都是苹果设备就好办了: 苹果设备之间可以一键共享Wifi密码. 共享W ...

  2. docker 容器共享数据_如何在Docker容器之间共享数据

    docker 容器共享数据 介绍 (Introduction) Docker is a popular containerization tool used to provide software a ...

  3. linux和windows文件共享软件,桌面应用|如何在 Linux 和 Windows 之间共享 Steam 的游戏文件...

    简介:这篇详细的指南将向你展示如何在 Linux 和 Windows 之间共享 Steam 的游戏文件以节省下载的总用时和下载的数据量.我们将展示给你它是怎样为我们节约了 83% 的数据下载量. 假如 ...

  4. [转载] 如何在Android设备之间共享Google Play应用,音乐等

    参考链接: 使用super访问Java祖父母的成员 We recently showed you how to configure your iOS devices for app and media ...

  5. 如何在Android设备之间共享Google Play应用,音乐等

    We recently showed you how to configure your iOS devices for app and media sharing; more than a few ...

  6. 如何在传统 ASP 和 ASP.NET 之间共享会话状态

    如何在传统 ASP 和 ASP.NET 之间共享会话状态 发布日期 : 4/1/2004| 更新日期 : 4/1/2004 Billy Yuen Microsoft Corporation 2003 ...

  7. vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据

    vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据 在vue项目中组件间相互传值或者后台获取的数据需要供多个组件使用的情况很多的话,有必要考虑引入vuex来管理这些凌乱的状态,今 ...

  8. Alfred 初学者指南:如何在 Mac 之间同步 Alfred 设置?

    Alfred 初学者指南:如何在 Mac 之间同步 Alfred 设置?具体教程如下: 首选项同步要求 本指南将带您完成使用 Dropbox 在两台 Mac 上设置同步所需的步骤. 要遵循此工作流程, ...

  9. 在多台FMS服务器之间共享流

    FMS有一个非常重要的功能,那就是可以在多台服务器之间共享流. 利用这一功能,我们可以把源服务器上的流分发到其它的服务器,这些获得流的服务器同样可以作为新的源服务器使用.这个功能有点象FMS集群. 我 ...

最新文章

  1. codeforces 8C. Looking for Order 状压dp
  2. 多master mysql_使用 Rotate Master 实现MySQL 多主复制
  3. python PyQt5 QColor()函数
  4. 好久不见webmin
  5. go环境搭建_容器化 Go 开发环境的尝试
  6. 弥补Web开发缺陷 实战HTML 5中存储API
  7. 2021泌阳高考成绩查询,驻马店教育局网站2021年泌阳中招成绩查询系统
  8. Spring Cloud微服务下的权限架构调研
  9. 【java奇思妙想】eval(data)和eval(“(“+data+“)“)的区别
  10. 移除单元格选中时的高亮显示状态
  11. 全网首发:MAC上运行SHELL脚本,typeset -l报错
  12. java中如何进入代码块_Java中的匿名代码块
  13. vue中index.html文件为什么可以使用模板语法
  14. 计算机图桌面打印出来,电脑excel图片无法打印怎么处理
  15. 装系统比较好用的PE工具推荐
  16. 在 html 中用加色法混合颜色
  17. 透视HTTP协议-进阶篇-极客时间-学习笔记
  18. office起动缓慢_如何解决Microsoft Outlook启动缓慢的问题
  19. linux新建/删除子接口
  20. RIGHT-BICEP单元测试——“二柱子四则运算升级版”

热门文章

  1. 字节跳动 Byte Camp 冬令营报名启动,高质量赛题带你线下备战 ICPC
  2. 蚂蚁金服上市诞生千个亿万富翁,财富自由,离你不远!
  3. Netscape 重构软件倒闭了,但我仍坚定地站重写!
  4. 如何快速写一款小而美的“上滑无限加载的控件”?| 博文精选
  5. 基础Git操作与GitHub协作吐血整理,收好!| 原力计划
  6. 科技行业的起步时代已结束
  7. GitHub 又又又挂了?
  8. 携程的 Dubbo 之路
  9. 知乎“下沉”,快手“上游”
  10. 霸气!Power 支持混合云、多云,性能完胜 x86!