select

概述

select主要是在effects中,取出state的值,它的参数是一个function函数,函数的第一个参数,就是state。

  effects: {
    *asayAdd(action, { put, call, select }) {
      const state = yield select(state => state);
      console.log(state);

      const counter = yield select(state => state.counter); // 通过namespace,取出对应model的state值
      console.log(counter);


      yield call(delay, 1000);
      yield put({ type: 'add' }); // 同一个model不用加namespace
    }
  },


打印结果

reducers 和 effects 中关于state的说明

  • reducers中,state值,是通过参数传入的;
  • effects中,state并没有通过参数传入,所以,想要取到state的值,需要通过saga中的关键字select。select传入的是一个函数,函数的第一个参数,就是state,所以,可以通过返回参数,就可以取到state的值了。
打印结果

select写法

其实都是一样的,只是对函数的不同写法而已。

  effects: {
    *asayAdd(action, { put, call, select }) {
      const state = yield select(state => state);
      console.log(state);

      // 写法一
      const counter = yield select(state => state.counter); // 通过namespace,取出对应model的state值
      // 写法二,解构取出
      const counter2 = yield select(({ counter }) => state); // 通过namespace,取出对应model的state值
      // 写法三,state在函数内部使用_表示
      const counter3 = yield select(_ => _.counter); // 通过namespace,取出对应model的state值
      
      console.log(counter);


      yield call(delay, 1000);
      yield put({ type: 'add' }); // 同一个model不用加namespace
    }
  },


你可能感兴趣的:(select)