全局数据状态管理库redux

187 阅读2分钟

redux是什么

Redux是Dan Abramov在2015年发布,是适用于React状态管理库。主要特性有:

  • 可预测
  • 中心化:全局只有一个store。
  • 易调试
  • 灵活

redux中的工作流:

image.png

基本概念

  • store:保存数据state的地方,可以把它看成是数据源对数据进行统一管理,是一个容器,整个应用中只能有一个store。所有组件均可通过redux规范与store中的数据进行交互。

  • action:改变State的唯一方式,他有一定 格式规范。action 内必须使用一个字符串类型的 type 字段来表示将要执行的动作(规定action对象里面必须有type字段,否则代码将报错)。

const action = {
  type: 'xxx',
  payload: 'yyy'
};
  • state:某个时刻Store数据的快照。

  • dispatch:View层发出Action的唯一方式。

state和dispatch是组件属性中的读、写api,读使用state,写使用dispatch。可以通过传selectorMapDispatchToProps来更精确地实现读写。

  • reducer:是一个纯函数,他接受action和当前state为参数,根据action中的type来改变相应的store内的state,返回一个全新的state

  • store.subscribe:订阅数据变化。一旦state发生改变,执行回调。 可以在这里实现自动渲染。

  • initState 初始的state

  • connect react-redux提供的一个高阶组件,作用是将组件和state连接起来。是一个封装读和写的高阶组件

中间件middleware

一个midware就是一个函数,它会去修改dispatch

createStore中传入第三个参数,即为中间件。applyMiddleware(reduxThunk,reduxPromise)**

  1. redux-thunk:改写dispatch方法,如果action是一个函数,就调用它。否则就传给下一个中间件。
  2. redux-promise:改写dispatch方法,如果action.payload的类型是promise对象,就在其后加入then方法。

4b6cdfd6af3d42708d9a0cc0e1747ce6_tplv-k3u1fbpfcp-zoom-in-crop-mark_1304_0_0_0.awebp

Redux的设计思想

  1. 应用是一个状态机,视图和状态是一一对应的。
  2. 把所有的State都集中管理,让整个UI和整个状态都能有对应的管理。

image.png

image.png