reactjs - 等待 redux 操作完成调度

标签 reactjs redux

我有以下 Action 创建者:

export function scrolltoNextItem(item) {
  return (dispatch, getState) => {
    dispatch(appendItem(Item));
    dispatch(
      scrollToNextIndex(
        getState().items.length - 1
      )
    )
  }
}

问题是 scrollToNextItem 在appendItem完成之前运行,并且滚动位置最终不正确。我可以通过添加 setTimeout 来证明这种情况,使脚本的执行在运行 scrollToNextItem 之前等待下一个刻度:

export function scrolltoNextItem(item) {
  return (dispatch, getState) => {
    dispatch(appendItem(Item));
    setTimeout(() => {
      dispatch(
        scrollToNextIndex(
          getState().items.length - 1
        )
      )
    }, 0);
  }
}

如何等待 appendItem 操作完成?在标准 react 领域,我只使用 setState 回调:

this.setState({something: 'some thing'}, () => {
  console.log('something is set');
});

但是dispatch不提供任何回调功能。

最佳答案

您始终可以将appendItem包装到promise中并将dispatch作为参数传递给它

const appendItem = (item, dispatch) => new Promise((resolve, reject) => {
  // do anything here
  dispatch(<your-action>);
  resolve();
}

然后你可以从scrolltoNextItem这样调用它

export function scrolltoNextItem(item) {
  return (dispatch, getState) => {
    appendItem(Item, dispatch).then(() => {
      dispatch(
        scrollToNextIndex(
          getState().items.length - 1
        )
      )
    })
  }
}

关于reactjs - 等待 redux 操作完成调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40946046/

相关文章:

javascript - React/Redux 状态在第二次操作调用时为空

reactjs - 为什么在 React-Redux 中更改时一种状态会影响另一种状态?

reactjs - Material UI ClickAwayListener 在单击自身时关闭

eclipse - 有没有适用于 React JS 的 eclipse 插件

javascript - MongoDB => findOne 或 find 查询下一个对象? ( meteor / react )

javascript - React/NodeJS - 当访问 localhost :3000 时网页无法工作

ReactJS axios 拦截器如何调度注销操作

javascript - 在react中创建控制面板页面

javascript - 如何为调用 reduxjs 的 mapStateToProps 的 React 组件编写单元测试?

reactjs - 如何更新 redux 工具包查询中获取的数据?