我只是碰到一个小兔子洞,却不知道如何“好”地解决这个问题。
我想要什么:
所以我该如何说传奇故事,直到减速器发生变化,因此我可以选择最新状态。 (当然,我可以处理reducer和saga中的更改,但是有另外一种方法,我只处理一次更改吗?)
// filters/actions.js
const changeFilterOption = (option, value) => ({
type: CHANGE_FILTER_OPTION,
payload: {
option,
value
}
})
// filters/reducer.js
reducer(state=initState, action) {
switch(action.type) {
//...
case CHANGE_FILTER_OPTION:
return changedFilterOptions...
//...
}
}
// listing/saga.js
saga(takeLatest(CHANGE_FILTER_OPTION, doSomeAPICallWithTheNewData))
function* doSomeAPICallWithTheNewData() {
//at this point the reducer might not changed yet,
//of course I can grab the payload and handle the changes in the saga as well.
//selectedOptions might not be updated...
const options = yield select(selectFilterOptions)
yield call(api.doSomeAPICall, option)
}
答案 0 :(得分:1)
在减速器更新商店后,Sagas将收到操作。因此,可以放心地假设从存储中选择的数据是最新的。
但是,在极少数情况下,sagaMiddleware之前的流中的任何中间件都不会同步调用{{1}}时,数据可能“过时”。
参考
阅读官方文档中的blockquote:
https://redux-saga.js.org/docs/api/index.html#selectselector-args
作者的GitHub评论:
https://github.com/redux-saga/redux-saga/issues/148#issuecomment-187898044
源代码:
https://github.com/redux-saga/redux-saga/blob/master/packages/core/src/internal/middleware.js#L44