记录一些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