【问题标题】:React: Await useReducer dispatch before navigating away反应:在导航离开之前等待 useReducer 调度
【发布时间】:2021-08-20 15:48:28
【问题描述】:

我有一个在onClick 处理程序中调用的函数。 它保存数据,然后使用例如导航离开。反应路由器:

async function saveAndExit() {
  await dispatchSave(data);
  navigateAway();
}

问题是dispatchSave 不能轻易等待:

// react hooks useReducer
const [state, dispatch] = useReducer(reducer, initialState)

// problem: dispatch doesn't return a promise
function dispatchSave(data) {
  dispatch({ type: 'save', payload: data })
})

使用dispatch 时处理此问题的正确方法是什么?

【问题讨论】:

    标签: javascript reactjs async-await react-router react-hooks


    【解决方案1】:

    你可以使用传统的回调

    function dispatchSave(data, callback) {
      dispatch({ type: 'save', payload: {data, callback} })
    })
    

    然后

    async function saveAndExit() {
      dispatchSave(data, navigateAway);
    }
    

    在你的中间件(Saga/Thunk)中,保存操作完成后,可以同步调用payload.callback()

    【讨论】:

    • 虽然这个术语似乎与 redux 相关(?),但我可以看到它如何应用于钩子。我会先看看减速器内部是否有不需要回调功能的东西,如果没有更简单的解决方案或其他改进建议,我会接受这个答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2021-05-10
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多