将 redux saga 与 react 结合使用时,状态如何被拉入 sagas.js

how does state gets pulled in sagas.js when using redux saga with react

我正在阅读一个涉及 redux-saga 的代码库。我刚开始使用 redux-saga,我看到 saga.js 中有许多实例已被拉出。

function* fetchxyz({ Id }) {
  try {
    const authToken = yield select(state => state.auth.authToken);
    const data = yield call(
      getxyz1,
      authToken,
      Id
    );
    yield put({
      type: FETCH_XYZ_SUCCESS,
      response:data
    });


}

我有点困惑这个状态是如何被拉入这个 saga.js 的。我强烈觉得我在某处缺乏一些理解,因为我不明白状态是如何被拉出的 saga.js .

Redux-saga 是一个 redux 中间件。每个 redux 中间件都可以通过 getState 函数访问 redux 状态。

Redux 文档:https://redux.js.org/api/applymiddleware#arguments

Redux-saga 用法:https://github.com/redux-saga/redux-saga/blob/master/packages/core/src/internal/middleware.js#L13

Sagas 是 redux-saga 库迭代的生成器,然后处理单独产生的效果。要访问 redux saga 中的状态,您可以像示例中那样使用 select 效果。

所以 redux-saga 所做的就是调用提供的选择器函数,并将 getState 函数的 return 值作为其参数。

https://github.com/redux-saga/redux-saga/blob/master/packages/core/src/internal/effectRunnerMap.js#L282

通过将 return 值作为参数传递给迭代器上的 next 函数,可以将生成的表达式计算为选择器函数的 return 值。这只是正常的生成器行为:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*#Passing_arguments_into_Generators