随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理太多的 state (状态)。这些 state 可能包括服务器响应、缓存数据、本地生成尚未持久化到服务器的数据,也包括 UI 状态,如激活的路由,被选中的标签,是否显示加载动效或者分页器等等。

管理不断变化的 state 非常困难。如果一个 model 的变化会引起另一个 model 变化,那么当 view 变化时,就可能引起对应 model 以及另一个 model 的变化,依次地,可能会引起另一个 view 的变化。直至你搞不清楚到底发生了什么。state 在什么时候,由于什么原因,如何变化已然不受控制。当系统变得错综复杂的时候,想重现问题或者添加新功能就会变得举步维艰。

通过限制更新发生的时间和方式,Redux 试图让 state 的变化变得可预测。这些限制条件反映在 Redux 的三大原则中。

Redux 可以用这三个基本原则来描述:

单一数据源 整个应用的 state 被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个 store中。

State 是只读的 唯一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。

使用纯函数来执行修改 为了描述 action 如何改变 state tree ,你需要编写 reducers。

总结 应用中所有的 state 都以一个对象树的形式储存在一个单一的 store 中。惟一改变 state 的办法是触发 action,一个描述发生什么的对象。为了描述 action 如何改变 state 树,你需要编写 reducers。

redux解决了什么问题?相关推荐

  1. Redux 核心概念

    http://gaearon.github.io/redux/index.html ,文档在 http://rackt.github.io/redux/index.html .本文不是官方文档的翻译. ...

  2. [译】Redux入门教程(一)

    前言 老外写技术文章真是叼,这是国外的一个程序员写的一个简单易懂,循序渐进的Redux教程,本着共享的精神,就翻译出来给大家一起看,文章最后有链接,不想看我翻译的直接去看原文吧. 下面是原教程的英文目 ...

  3. 喵了个咪!redux middleware居然如此简单

    Redux解决了react中出现的多交互.多数据源问题,但是如果有异步操作,或者要对操作进行拦截或者执行后回调就比较麻烦.于是我们需要Redux 中间件. 一.手动增强store.dispatch 我 ...

  4. 喵了个咪!redux middleware居然如此简单!

    Redux解决了react中出现的多交互.多数据源问题,但是如果有异步操作,或者要对操作进行拦截或者执行后回调就比较麻烦.于是我们需要Redux 中间件. 一.手动增强store.dispatch 我 ...

  5. [译] 从设计师的角度看 Redux

    原文链接: www.smashingmagazine.com/2018/07/red- 推荐理由: 插图大爱 没有空洞的概念 也没有海量的代码! 内容概要: 你是否知道 Redux 的真正威力远不止状 ...

  6. 看漫画学 Redux

    Flux 架构已然让人觉得有些迷惑,而比 Flux 更让人摸不着头脑的是 Flux 与 Redux 的区别.Redux 是一个基于 Flux 思想的新架构方式,本文将探讨它们的区别. 如果你还没有看过 ...

  7. [译] ⚛ React 状态管理工具博物馆

    原文地址:⚛ The React State Museum: ⚡️View the hottest state management libs for React 原文作者:Gant Laborde ...

  8. 前端面试-综合问题版

    一.基础 #1.1 HTML html5新标签有哪些 canvas.svg.webGL 你是如何理解 HTML语义化的,有什么好处 前端需要注意哪些SEO? manifest.worker.socke ...

  9. React上下文-Context

    导语 redux解决的核心问题是父子兄弟等组件件传值很麻烦的问题,于是有了一个"通讯班"--redux,这个通讯班可以帮我们把组件之间的状态整合到一起,然后修改也统一修改.我们觉得 ...

最新文章

  1. 使用Python,OpenCV,面部标志进行面部对齐
  2. 如何卸载Exchange Server 2010
  3. Android下载图片路径问题
  4. 设置sqlplus环境变量
  5. [概统]本科二年级 概率论与数理统计 第三讲 离散型随机变量
  6. await,async 我要把它翻个底朝天,这回你总该明白了吧
  7. 蓝桥杯大赛青少年创意编程 第十一届 省赛 C++组试题 第1题 双面打印
  8. 8. 字符串转换整数 (atoi)(正则表达式)
  9. java编译过程_java 程序编译和运行过程详解
  10. groupdel: cannot remove the primary group of user 'lxh1'的解决办法
  11. 基于无线发射接收物体远离报警器的设计
  12. 用户价值分层——基于RFM模型的研究分析
  13. request请求头中出现Provisional headers are shown
  14. 抖音作品实时监控采集数据,抖音达人下关键词数据抓取
  15. 女主学霸男主学神小说计算机系的,5本双学霸校园甜文:忠犬学神男主VS低情商学霸女主,全程高甜!...
  16. 利用Python制作动漫人物
  17. 又开始的python-day10-20200821-文件操作相关内置函数-拷贝-读取-写入
  18. word文档打不开的常见原因?好的处理方法
  19. PHP梯度计算金额,数字图像的梯度概念以及计算(the gradient of the image)
  20. 四阶行列式计算python_四阶行列式的计算题?

热门文章

  1. 连肝7个晚上,总结了66条计算机网络的知识点
  2. VUE 的使用,学会这些就足够了!| 原力计划
  3. 联合国为何 Pick 腾讯?
  4. 巨杉数据库 v5.0 Beta 正式发布!
  5. 围观京东云,您有一份区块链技术礼包待查收!
  6. Python 分析在德的中国程序员,告别 996 ?
  7. 如何编写完美的 Python 命令行程序?
  8. 2018 终了,是时候秀出我的 Git 进化日志了!
  9. 腾讯用微信、QQ 把微视送上了 App Store 第一 | 畅言
  10. 拒绝“佛系”程序员!