如何在Redux中完成另一个同步操作时调度操作

时间:2016-01-20 00:02:47

标签: reactjs redux

我有一个更新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...

1 个答案:

答案 0 :(得分:1)

在您的updateLocalCriteria中,您可能已经将减速器的一个道具更改为新值,我将其称为criteria

你可以做的是创建另一个动作,让我们说updateCriteriaAndFetch就像你一样被调用:

this.props.dispatch(updateCriteriaAndFetch(newCriteria))

你将基本上这样定义

export const updateCriteriaAndFetch = criteria => dispatch => {
  dispatch(updateLocalCriteria(criteria))
  dispatch(fetchApiResults(criteria))
}

第二次调度甚至会等待你的第一次同步更新完成,即使你真的不需要它,因为你已经可以访问它。

你仍然可以按照你所说的去做,获得商店的当前状态,但这似乎对我来说太过分了,因为你可以简单地将它作为参数或你的行动传递。