如何在 redux-saga 函数中从状态/存储中获取内容?

如何在 saga 函数中访问 redux 状态?

简短的回答:

import { select } from 'redux-saga/effects';
...
let data = yield select(stateSelectorFunction);

答案 1

正如@markerikson已经说过的那样,公开了一个非常有用的API select()来调用状态上的一个,以便在saga中获取它的某些部分。redux-sagaselector

对于您的示例,一个简单的实现可以是:

/*
 * Selector. The query depends by the state shape
 */
export const getProject = (state) => state.project

// Saga
export function* saveProjectTask() {
  while(true) {
    yield take(SAVE_PROJECT);
    let project = yield select(getProject); // <-- get the project
    yield call(fetch, '/api/project', { body: project, method: 'PUT' });
    yield put({type: SAVE_PROJECT_SUCCESS});
  }
}

除了@markerikson推荐的文档之外,还有一个非常好的视频教程,由D. Abramov解释如何使用Redux。在Twitter上也检查这个有趣的帖子。selectors


答案 2

这就是“选择器”函数的用途。您将它们传递整个状态树,它们返回状态的某些部分。调用选择器的代码不需要知道数据处于状态的位置,只需要知道数据是返回的。有关些示例,请参阅 http://redux.js.org/docs/recipes/ComputingDerivedData.html。

在 saga 中,select() API 可用于执行选择器。