我有一个更新Redux中某些搜索条件的操作。我想立即根据本地标准从API中获取一些数据。问题是虽然搜索条件操作调度是同步的,但在搜索结果调度开始之前它不会完成。
在此示例中,在api调用之前不会更新条件:
this.props.dispatch(updateLocalCriteria(someData));
this.props.dispatch(fetchApiResults(this.props.criteria))
我错过了一些明显的东西吗?我可以想到一些处理这个问题的hacky方法,但最好的方法是什么?我应该在搜索条件更新时设置标志,如果标志为真,则在componentDidUpdate()
中获取结果吗?或者我应该使updateLocalCriteria()
异步,以便我可以在promise链中链接fetchApiResults()
吗?
修改
我想我找到了答案。我可以在fetchApiResults()
内获得当前状态。因此,我可以在进行api调用之前获取当前的搜索条件。
function fetchApiResults() {
return (dispatch, getState) => {
const state = getState();
// fetch data and dispatch...
答案 0 :(得分:1)
在您的updateLocalCriteria
中,您可能已经将减速器的一个道具更改为新值,我将其称为criteria
。
你可以做的是创建另一个动作,让我们说updateCriteriaAndFetch
就像你一样被调用:
this.props.dispatch(updateCriteriaAndFetch(newCriteria))
你将基本上这样定义
export const updateCriteriaAndFetch = criteria => dispatch => {
dispatch(updateLocalCriteria(criteria))
dispatch(fetchApiResults(criteria))
}
第二次调度甚至会等待你的第一次同步更新完成,即使你真的不需要它,因为你已经可以访问它。
你仍然可以按照你所说的去做,获得商店的当前状态,但这似乎对我来说太过分了,因为你可以简单地将它作为参数或你的行动传递。