作用:

  • 组件间通信
  • 通过对象驱动组件进入生命周期
  • 单一数据源,可以方便数据操作

思考:

  • 为什么需要store,通过action reduce来控制数据 而不是直接一个 obj类似 obj[a] =’someting’ 来修改对象 来操作数据呢

    因为直接一个去修改对象的话,会严重影响我们调试 因为我们不知道是哪里修改的这个数据,但是通过action,redux的方式 数据改变之后我们都可以留下对应的日志

数据流程:

  • 项目 初始化 createStore(reducer, preloadedState, enhancer) 生成store(如果有enhancer会修改store的dispatch函数) 放入 Provider中
  • 页面通过 view> dispatch(action)(有enhancer 的话就会执行 中间件的方法)调用reduce会返回新的state 然后dispatch中更新 到store中去

1、用户通过 View 发出 Action:

  1. store.dispatch(action);

2、然后 Store 自动调用 Reducer,并且传入两个参数:当前 State 和收到的 Action。 Reducer 会返回新的 State 。

  1. let nextState = xxxReducer(previousState, action);

3、State 一旦有变化,Store 就会调用监听函数。

  1. store.subscribe(listener);

4、listener可以通过 store.getState() 得到当前状态。如果使用的是 React,这时可以触发重新渲染 View。

  1. function listerner() {
  2. let newState = store.getState();
  3. component.setState(newState);
  4. }