设计思想:

(1)Web 应用是一个状态机,视图与状态是一一对应的。

(2)所有的状态,保存在一个对象里面。

核心源码:


基本概念: 

1.Store:就是保存数据的地方,你可以把它看成一个容器。整个应用只能有一个 Store。

const store = createStore(fn); 复制代码

2.State:Store对象包含所有数据。如果想得到某个时点的数据,就要对 Store 生成快照。这种时点的数据集合,就叫做 State。

store.getState();复制代码

3.Action:State 的变化,会导致 View 的变化。但是,用户接触不到 State,只能接触到 View。所以,State 的变化必须是 View 导致的。Action 就是 View 发出的通知,表示 State 应该要发生变化了。

function addTodo(text) {return {type: ADD_TODO,text}
} 复制代码

4.store.dispatch():是 View 发出 Action 的唯一方法。

5.Reducer:Store 收到 Action 以后,必须给出一个新的 State,这样 View 才会发生变化。这种 State 的计算过程就叫做 Reducer。

const reducer = function (state, action) {// ...return new_state;
}; 复制代码

实际应用中,Reducer 函数不用像上面这样手动调用,store.dispatch方法会触发 Reducer 的自动执行。为此,Store 需要知道 Reducer 函数,做法就是在生成 Store 的时候,将 Reducer 传入createStore方法。 为什么这个函数叫做 Reducer 呢?因为它可以作为数组的reduce方法的参数。

array.reduce(function(total, currentValue, currentIndex, arr), initialValue);复制代码

Redux 提供了一个combineReducers方法,用于 Reducer 的拆分。

const chatReducer = combineReducers({chatLog,statusMessage,userName
}); 复制代码

6. store.subscribe():Store 允许使用store.subscribe方法设置监听函数,一旦 State 发生变化,就自动执行这个函数。

redux流程机制:

中间件使用介绍:

1.redux-logger为例:将它放在applyMiddleware方法之中,传入createStore方法,就完成了store.dispatch()的功能增强,注意applyMiddleware(thunk, promise, logger)的参数顺序是固定的。

2.redux-thunk:使用redux-thunk中间件,改造store.dispatch,使得后者可以接受函数作为参数(如图异步action)。

3.redux-promise:就是让 Action Creator 返回一个 Promise 对象。

const fetchPosts = (dispatch, postTitle) => new Promise(function (resolve, reject) {dispatch(requestPosts(postTitle));return fetch(`/some/API/${postTitle}.json`).then(response => {type: 'FETCH_POSTS',payload: response.json()});
});复制代码


附:中间件applyMiddleware源码

转载于:https://juejin.im/post/5afd33f8518825673954f180

redux学习笔记归纳相关推荐

  1. Redux 学习笔记

    1:首先安装redux: npm install --save redux 2:引入redux : import { createStore } from 'redux'; //首先创建执行函数,Re ...

  2. Android学习笔记——归纳整理

    目录 一:Android系统架构 二:Actvity相关 2.1基础相关 2.2 Intent相关 2.2.1 Intent的组成 2.2.2 显式Intent 2.2.3 隐式Intent 2.2. ...

  3. 学习笔记之——Android常用属性归纳

    本篇博客仅作为个人学习笔记所用,各种Android常用属性归纳长期更新,如有错误和建议还望指点~ 1.控件透明度和半透明度: 半透明<Button Android:background=&quo ...

  4. 【学习笔记】软件设计模式(一)基本概念与归纳总结

    软件设计模式之基本概念与归纳总结 本人学习笔记.内容参考<Java设计模式>刘伟 教程配套PPT.仅供学习参考使用. 文章目录 软件设计模式概述 模式的分类 模式定义和特点的归纳总结 1. ...

  5. (学习笔记)【目标检测】YOLO系列简单归纳

    文章目录 絮絮叨叨 一.YOLO发展史 二.逐篇学习 1.You Only Look Once: Unified, Real-Time Object Detection 2.YOLO9000 3.YO ...

  6. 经典算法——爬楼梯(解法归纳)(学习笔记)

    问题分析 假设你正在爬楼梯.需要 n 阶你才能到达楼顶.每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢?是引用 当n=1时,只需爬一个台阶,就是一种解法. 当n=2时,可以走两次 ...

  7. C#学习笔记——菜鸟教程C#学习重点归纳

    C#学习笔记 第一章:程序结构 一.结构 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statemen ...

  8. Hadoop学习笔记一 简要介绍

    Hadoop学习笔记一 简要介绍 这里先大致介绍一下Hadoop.     本文大部分内容都是从官网Hadoop上来的.其中有一篇介绍HDFS的pdf文档,里面对Hadoop介绍的比较全面了.我的这一 ...

  9. ci mysql 事务_MySQL事务-学习笔记

    MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...

最新文章

  1. 不为人知的AI简史:“人机共生 ”梦想家 , 却意外促成互联网的出现
  2. 互联网1分钟 | 0306 熊猫直播被爆本月申请破产;腾讯QQ注销功能本周灰度体验,预计下周正式发布...
  3. html固定dl高度_HTML入门笔记1
  4. [react] React v15中怎么处理错误边界?
  5. openstack常用运维命令_运维人员常用的Linux命令汇总
  6. php输出语句echo、print、print_r、printf、sprintf、var_dump比较
  7. js 自学,云知梦知识 点理论
  8. swift -inout关键字
  9. 兆易创新GD32系列单片机不同容量和启动文件之间的选择(GD32F10X_MD/GD32F10X_HD/GD32F10X_XD/GD32F10X_CL)
  10. gaussdb 安全维护【设置帐户权限】【02】
  11. 态度决定一切细节决定成败_字体设计可以决定设计的成败:选择字体的过程
  12. Linux编译移植Qt5的环境_OMAPL138平台
  13. Aspose.Words doc转pdf 内容出现丢失,页码跳页,排版混乱问题
  14. unity使用easy ar制作ar红包
  15. 远期外汇交易的交割日
  16. deepin系统安装nginx
  17. 【网上教学】实现线上签到和收批作业的方法
  18. Unit3D打包android时出错 CommandInvokationFailure: Unable to list target platforms. Please make sure the a
  19. <caption>表格标题标签
  20. 【华人学者风采】James T. Kwok(郭天佑) 香港科技大学

热门文章

  1. xml tools属性详解
  2. 高级Android开发面试汇总
  3. (0087)iOS开发之NSString属性为什么要用copy来修饰?
  4. (010) java后台开发之String字符串操作
  5. (0062)iOS开发之Xcode自带单元测试UnitTest
  6. topcoder13444
  7. AutoML初创公司探智立方:模型的物竞天择与适者生存
  8. Cortex-A9 UART
  9. (转)对微软那棵TreeView进行试用,主要是对CheckBox进行操作
  10. 接口请求,上传byte数组byte[]数据异常,负数变正数/负数变63