如何访问saga函数中的redux状态?
简短回答:
import { select } from 'redux-saga/effects';
...
let data = yield select(stateSelectorFunction);发布于 2016-06-12 22:00:15
正如@markerikson已经说过的那样,redux-saga公开了一个非常有用的API select()来调用状态中的selector,以便在传奇中获得它的某些部分。
对于您的示例,一个简单的实现可以是:
/*
* 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中使用selectors。还可以在Twitter上查看这有趣的帖子。
发布于 2016-06-12 18:28:59
这就是“选择器”函数的用途。你把整个州树传递给他们,他们就会返回一些州的一部分。调用选择器的代码不需要知道数据的状态在哪里,只需要知道它是返回的。有关一些示例,请参见http://redux.js.org/docs/recipes/ComputingDerivedData.html。
在saga中,可以使用API接口来执行选择器。
发布于 2019-10-17 12:34:27
我使用一个eventChannel来分派生成器函数中回调的动作。
import {eventChannel} from 'redux-saga';
import {call, take} from 'redux-saga/effects';
function createEventChannel(setEmitter) {
return eventChannel(emitter => {
setEmitter(emitter)
return () => {
}
}
)
}
function* YourSaga(){
let emitter;
const internalEvents = yield call(createEventChannel, em => emitter = em)
const scopedCallback = () => {
emitter({type, payload})
}
while(true){
const action = yield take(internalEvents)
yield put(action)
}
}https://stackoverflow.com/questions/37772877
复制相似问题