状态管理,react没有提供一个整个应用的状态管理,所以就有redux的出现,首先声明 redux 非必须。
redux设计原则:
- 单一数据源,整个应用只维护一颗state树
- 数据源是只读的,只有触发action,通过reducer产生新的状态才能更新state树
- reducer必须是纯函数,保证同样入参产生一样的结果。
redux本身就只包含4个API
- getState:获取当前的state数据
- dispatch,分发action
- subscribe,注册一个监听者
- replacereducer,更新当前store中的reducer
redux整个数据流过程如下:
image.png
react-redux,提供redux和react联接的桥梁,<provider/>和connect(),provider利用react提供的contextTypes来实现redux中的store,这样我们就可以在所有的子组件中拿到store,connect参数有四个:mapStateToprops / mapDispatchToProps / mergeProps / options(是否纯组件(pure),是否返回ref(withRef))
middleware,提供一个分类处理action的机会,我们可以检阅每个通过的action,挑选出对应类型的action进行相应操作。这个原理类似虹吸原理,外部action一层一层的进入middleware,直至处理到最里层,获取到最新的dispatch,如果这个过程中利用这个dispatch分发某个action,又会嵌套,从最外层分发开始一直next,这个原理类似koa,然后redux-thunk利用这个原理实现异步通信。
redux-promise,提供一个promise类型的middleware,实现promise方式的异步
redux-saga,提供一个基于generator方式的异步通信
网友评论