Redux管理应用状态的框架:数组
Redux是Flux思想的另外一种实现方式;架构
Flux(含Redux)贯彻的重要观点——单向数据流;框架
Flux推翻了MVC框架,用了新的思惟来管理数据流转;ide
MVC框架把应用分为三部分:函数
MVC框架的缺点:this
对于很是巨大的代码库和庞大的组织,MVC框架很快变得很复杂。每新增一个功能时,对代码的修改很容易引入新的Bug,不一样模块之间的依赖关系让系统变得“脆弱且不可预测”。spa
Flux的特色:component
更严格的数据流控制;对象
Flux应用分为四个部分:blog
Flux和MVC结构上的区别:
一个EventEmitter实例对象支持的函数:
如何使Dispatcher调用回调函数的顺序是咱们预期的呢?
Dispatcher的waitFor函数。
Dispatcher的waitFor函数能够接受一个数组做为参数,数组中的每个元素都是Dispatcherregister函数的返回结果,即dispatchToken。这个waitFor函数告诉Dispatcher,当前的处理必须暂停,直到dispatchToken表明的那些已注册回调函数执行结束才能继续。
存在于Flux框架中的React组件须要实现的功能:
Flux的架构下,应用的状态被放在Store中,React组件只扮演View的做用,被动根据Store的状态来渲染。
Flux的优点主要表如今“单向数据流”的管理方式。
在Flux的理念中,改变界面就必须改变Store的状态,改变Store的状态就必须派发一个对象。
MVC最大的缺点就是没法禁绝View和Model之间的直接对话。
在Flux的体系下,驱动界面的改变始于一个动做的派发,别无他法。
若是把Flux看作一个框架理念的话,Redux就是Flux的一种实现,除Redux以外,实现Flux的框架有Reflux、Fluxible等。
Redux的三个基本原则:
驱动用户界面渲染,就要改变应用的状态,但不是去修改状态的值,而是建立一个新的状态对象给Redux,由Redux完成新的状态的组装。
无
在Redux的框架下,一个React组件基本要完成两个功能:
让一个组件专一一件事,若是发现一个组件作的事情太多,就能够把这个组件拆分红多个组件,让每一个组件依然只作一件事情。
容器组件(Container Component):承担第一个任务的组件,即负责和Redux Store打交道的组件,处于外层;另外一种说法叫作聪明组件(Smart Component)。容器组件作的事情涉及一些状态转换。
展现组件(Dumb Component):承担第二个任务的组件,即只专心负责渲染界面的组件,处于内层;另外一种说法叫作傻瓜组件(Dumb Component)。傻瓜组件其实就是一个纯函数,根据props产生结果。
组件Context:就是所谓的“上下文环境”,让一个树状组件上的全部组件都可以访问的对象,为了完成这个任务,须要上级组件和下级组件配合。
首先,上级组件要宣称本身支持Context,而且提供一个函数来返回表明Context的对象。
其次,此上级组件之下全部的子孙组件,只要宣称本身须要这个Context,就能够经过this.context访问到这个共同的环境对象。
Redux对Store的封装好,没有提供直接修改状态的功能。虽然组件可以访问全局惟一的Store,可是不能直接Store中的状态,克服Store做为全局对象的缺点。
改进React应用的两个方法:
Redux两个最主要的功能:
1.connect
容器组件的工做:
简言之,一是对内层傻瓜组件的输入,二是内层傻瓜组件的输出。
2.Provider
React-Redux要求Store所包含的三个函数的Object:
拥有以上三个函数的对象,才能称之为Redux的Store。
React-Redux定义了Provider的componentWillReceiveProps函数,在React的生命周期中,componentWillReceiveProps函数每次渲染时都会被调用。
每一个Redux应用只能有一个Redux Store ,在整个Redux的生命周期中都应该保持Store的惟一性。