Redux是一款状态管理库,并且提供了react-redux库来与React亲密配合, 但是总是傻傻分不清楚这2者提供的API和相应的关系。这篇文章就来理一理。

如果要用一句话来概括Redux,那么可以使用官网的这句话:Redux是针对JavaScript应用的可预测状态容器。此句话虽然简单,但包含了以下几个含义:

可预测性(predictable): 因为Redux用了reducer与纯函数(pure function)的概念,每个新的state都会由旧的state建来一个全新的state。因而所有的状态修改都是”可预测的”。
状态容器(state container): state是集中在单一个对象树状结构下的单一store,store即是应用程序领域(app domain)的状态集合。
JavaScript应用: 这说明Redux并不是单指设计给React用的,它是独立的一个函数库,可通用于各种JavaScript应用。
Redux基于简化版本的Flux框架,Flux是Facebook开发的一个框架。在标准的MVC框架中,数据可以在UI组件和存储之间双向流动,而Redux严格限制了数据只能在一个方向上流动。

具体的模型图如下图所示:

为了说明整个模型的运作流程,首先我们需要弄清Redux模型中的几个组成对象:action 、reducer、store。

action:官方的解释是action是把数据从应用传到 store 的有效载荷,它是 store 数据的唯一来源;要通过本地或远程组件更改状态,需要分发一个action;
reducer:action发出了做某件事的请求,只是描述了要做某件事,并没有去改变state来更新界面,reducer就是根据action的type来处理不同的事件;
store:store就是把action和reducer联系到一起的对象,store本质上是一个状态树,保存了所有对象的状态。任何UI组件都可以直接从store访问特定对象的状态。
在Redux中,所有的数据(比如state)被保存在一个被称为store的容器中 ,在一个应用程序中只能有一个store对象。当一个store接收到一个action,它将把这个action代理给相关的reducer。reducer是一个纯函数,它可以查看之前的状态,执行一个action并且返回一个新的状态。

Redux
Redux 三大核心
Redux的核心由三部分组成:Store, Action, Reducer。

Store : 是个对象,贯穿你整个应用的数据都应该存储在这里。
Action: 是个对象,必须包含type这个属性,reducer将根据这个属性值来对store进行相应的处理。除此之外的属性,就是进行这个操作需要的数据。
Reducer: 是个函数。接受两个参数:要修改的数据(state) 和 action对象。根据action.type来决定采用的操作,对state进行修改,最后返回新的state。

最新文章

  1. Unity3D框架插件uFrame实践记录(一)
  2. Python环境配置安装
  3. PHP中类的继承和构造函数的继承
  4. 海洋女神建新installshield交流群了,原来的老群都满了,请加新群哦,记得认真填写验证信息
  5. 在ASP.NET中上传附件
  6. ASP.NET WEB API 中的路由调试与执行过程跟踪
  7. IL指令大全
  8. Android开发规范——命名 (转)
  9. 最小生成树(kruskal模版 模板)
  10. jQuery的入门操作
  11. node 全局对象global —— 记录在线人员
  12. mac charles手机抓包详细教程
  13. Linux基本命令总结(七)
  14. win10 win7 环境下 oracle 11g和Plsql的安装、卸载遇到的问题。
  15. 最优-scroll事件的监听实现
  16. 探索未知种族之osg类生物---呼吸分解之事件循环二
  17. jni的一些基础知识和概念
  18. CentOS7安装ipython
  19. WEB前端 [编码] 规则浅析
  20. css鼠标移动到文字上怎样变化背景颜色

热门文章

  1. ios html5头部无法固定的问题(安卓正常)
  2. codeforces1217-edu
  3. 手风琴jq实现
  4. 2018-8-10-C#-判断文件编码
  5. asp dotnet core 图片在浏览器没访问可能原因
  6. JMETER+JENKINS接口测试持续集成
  7. C# 标准性能测试高级用法
  8. 2019-5-12-WPF-模拟触摸设备
  9. IdentityServer4 Clients
  10. linux包之dracut