Redux概述redux
是什么:Redux是管理状态的容器,提供可预测的状态管理。dom
怎么作:Redux主要是用来管理组件或者应用的状态,本质上跟一个事件处理器差很少。经过分发action触发reduce来处理state。 特色:函数
整个应用的state是惟一,state的更新引起应用或者组件的更新,在整个程序运行期间,state有且仅有一个。spa
惟一改变state的方法是触发action,在reduce中 重置 state的属性, 3. 纯函数执行修改对象
相同的输入对应相同的输出事件
基础信息路由
action文档
action是把数据从应用传到store的有限载荷。其本质上的一个js对象。按照约定,action对象中应该有一个type 字段来表示将要执行的动做,其余属性能够自由定义。 在整个数据流中,action扮演的是一个消息通知者的角色,简单的说就是告知store哪些‘事件’被触发了。redux能够经过reduce根据不一样的action来对state作不一样的操做。get
Reducerio
若是说action是‘事件’的话,那么reducer就是‘事件处理器’。 在Redux应用中,全部的state都保存在惟一的对象中。
reducer 就是一个纯函数,接收旧的 state 和 action,返回新的 state。如今只须要谨记 reducer 必定要保持纯净。只要传入参数相同,返回计算获得的下一个 state 就必定相同。没有特殊状况、没有反作用,没有 API 请求、没有变量修改,单纯执行计算。
永远不要在 reducer 里作这些操做:
修改传入参数;
执行有反作用的操做,如 API 请求和路由跳转;
调用非纯函数,如 Date.now() 或 Math.random()。
注意 :
1.不要修改state。使用新的对象,而后将原有state值拷贝到新对象而不是直接在老对象上更新属性,js对象都是引用,若是在原有state上更新,可能会致使Redux没法正确完成state的diff比较。
2. 默认状况下返回原有state
其余:
使用combineReducers() 来组合reducer。
store
若是说action是‘事件’,reducer是‘事件处理器’,那么store就是全局的事件管理对象。 每一个Redux应用都应该只有 一个单一的store。但须要拆分数据处理逻辑时,应该使用Reducer组合而不是建立多个store。
Store主要有如下职责:
经过createStore()方法建立store实例,该方法接受两个参数:第一个是reducer,就是action的处理函数,第二个是可选参数,用来设置state的初始状态。
数据流
全部Redux应用中,数据的流向是单向的,具体能够从如下几点来理解:
多个Reducer共同处理action后,把state合并成一个新的state对象。 4. 返回新state
最终返回一个新的state对象,Redux应用可使用该state作其余事情了。
[参考redux官方文档](http://www.redux.org.cn/)