这是我的传奇:
function* upAsyncSaga() {
yield takeEvery(UP_ASYNC, upAsyncHandler);
}
以下是相关的同步资料:
const UP_ASYNC = 'UP_ASYNC';
export function upAsync() {
return {
type: UP_ASYNC
}
}
function* upAsyncHandler() {
yield call(wait, 1000);
yield put(up());
}
const UP = 'UP';
export function up() {
return {
type: UP
}
}
我通过执行upAsyncSaga
来触发store.dispatch(upAsync())
。但是我想传递一个名为times
的参数。所以我想做store.dispatch(upAsync(3))
然后我希望/想要获得像这个伪代码的处理程序的参数:
export function upAsync(times) { // this is the argument "times"
return {
type: UP_ASYNC
times // here it is again
}
}
function* upAsyncHandler(times) { // i want the argument to get to the handler
for (let i=0; i<times; i++) {
yield call(wait, 1000);
yield put(up());
}
}
这可能吗?
答案 0 :(得分:2)
当我们将任何行动发送到商店时,我们可以包含这样的参数(有效载荷):
store.dispatch( { type: UP_ASYNC, payload : { times: 2 }})
修改你的功能:
export function upAsync(type, payload) {
const { type, times } = payload
return {
type: type,
times: times
}
}
我不确定您的完整商店实施情况如何,但如果您遵循redux-saga,上述内容应该可以解决您的问题。
编辑:
如果你有具有效果的redux商店(我相信),那么你可以简单地执行这样的动作:
dispatch({type: '<namespace>/upAsyncHandler', payload: {type: UP_ASYNC, times: 2}})
此处,&#39;命名空间&#39;表示在redux存储中的命名空间,其中处理程序被定义为效果。见下文:
*upAsynHandler(action, { call }) {
const { type, times } = action
const res = yield call(wait, times)
}