回顾redux

29 阅读1分钟

短暂回顾了下redux基本知识点:

  1. provider和connect,前者负责把store传到子组件,后者负责接受props中的store并通过props注入到子组件中
  2. store的创建可以需要一个reducer,类似于菜谱,定义了各种操作(action)并且修改原料库存(state),reducer需要传入一个初始state
// 首先定义一个改变数据的plain函数,成为reducer
function count (state, action) {
  var defaultState = {
    year: 2015,
  };
  state = state || defaultState;
  switch (action.type) {
    case 'add':
      return {
        year: state.year + 1
      };
    case 'sub':
      return {
        year: state.year - 1
      }
    default :
      return state;
    }
  }

// store的创建
var createStore = require('redux').createStore;
var store = createStore(count);

// store里面的数据发生改变时,触发的回调函数
store.subscribe(function () {
  console.log('the year is: ', store.getState().year);
});

// action: 触发state改变的唯一方法(按照redux的设计思路)
var action1 = { type: 'add' };
var action2 = { type: 'add' };
var action3 = { type: 'sub' };

// 改变store里面的方法
store.dispatch(action1); // 'the year is: 2016
store.dispatch(action2); // 'the year is: 2017
store.dispatch(action3); // 'the year is: 2016

  1. connect调用需要两个方法作为参数,mapStateToProps和mapDispatchToProps,这两个函数定义在使用connect的父组件中,作用是把state和action方法传到下一层子组件 前者的形式比较简单,可以选一些子组件用得到的属性传进去
const mapStateToProps = (state) => 
    { 
        return { count: state.count } 
    }

后者的实现稍微复杂一些,dispatch类似于promise创建时的resolve参数,定义在connect源码内部,不用太关心,这里的dispatch可以是同步的,也可以是异步的

function mapDispatchToProps(dispatch) {
    return {
        sendTheAlert: () => {dispatch(ALERT_ACTION)}
    }
}

dispatch调用action后就会扔给store里的reducer来处理对应的action,从而使得state改变