react相关

记录一些react的知识点及资料

虚拟DOM是React核心,通过diff比较算法,实现了对界面上真正变化的部分进行实际的DOM操作

diff算法

传统的diff算法的时间复杂度是 O(n^3),它会以根据before和after的最长子节点长度,循环遍历所有子节点,然后判断子节点的更新状态
react中的diff算法将时间复杂度降为 O(n), 分别对 tree diff、component diff 以及 element diff 进行算法优化
[more](https://zhuanlan.zhihu.com/p/20346379?refer=purerender)

性能优化

利用shouldComponentUpdate 函数
[more](http://imweb.io/topic/577512fe732b4107576230b9)

redux && flux

Flux 中是根据不同的功能拆分出多个 store 分而治之
而 Redux 只允许应用中有唯一的 store,通过拆分出多个 reducer 分别管理对应的 state
[more](https://segmentfault.com/a/1190000006769471)

state是应用的状态,一般是一个普通对象,store 是应用状态 state 的管理者
包含下列函数:
    * getState() 获取整个 state
    * dispatch(action)  **触发 state 改变的唯一途径**
    * subscribe(listener),类似于addEventListener
    * replaceReducer(nextReducer) 一般在 Webpack Code-Splitting 按需加载的时候用
获取state,**state = store.getState()**
一个应用只应有一个单一的 store,其管理着唯一的应用状态 state,不能直接修改应用的状态 state

若要修改state **必须 dispatch 一个 action**

生成store,**createStore**

**Action**
action(动作)实质上是包含 type 属性的普通对象,
 Action Creator是 action 的创造者,本质上就是一个函数,返回值是一个 action(对象),它用于绑定到用户的操作(点击按钮等),其返回值 action 用于之后的 dispatch(action)

**Reducer**
每次 dispatch(action) 后,都会触发 reducer 的执行,reducer 的实质是一个函数,根据 action.type 来更新 state 并返回 nextState
最后会用 reducer 的返回值 nextState 完全替换掉原来的 state

流程:Action Creator => action => store.dispatch(action) => reducer(state, action) => state = nextState