【问题标题】:react-redux dispatch an action that depends on another synchronouslyreact-redux 同步调度一个依赖于另一个动作的动作
【发布时间】:2021-06-24 10:48:16
【问题描述】:

我正在尝试使用 redux 操作更新商店。我需要调度两个动作来获得我的结果。请注意,我无法控制setFieldAction,因此必须通过两个操作来完成。现在,当我调用第二个调度时,我收到一个错误,因为第一个尚未完成,即状态在下一次渲染之前不会更新。那么我该如何实现呢?

useEffect(() => {
    dispatch(setFieldAction(0, "field1", "value1"));
    dispatch(setFieldAction(0, "field2", "value2"));
});

【问题讨论】:

    标签: reactjs redux react-redux


    【解决方案1】:

    您可以在 useEffect 函数中检测 FieldAction 状态的变化并对其进行检查。例如:

    useEffect(() => {
        if(props.reducer?.obj1?.obj2?.FieldAction === "something"){ // check the value and dispatch the appropriate action,  for example
           dispatch(setFieldAction(0, "field2", "value2"));
        }
    }, [props.reducer?.obj1]); // this will be called whenever props.reducer.obj1 is updated
    

    【讨论】:

    • 但是FieldAction在reducer中比如props.reducer.obj1.obj2.FieldAction。 obj1 可以是未定义的,obj2 也是如此
    • 然后您可以查找该对象中的更改。我正在更新我的答案
    • 是的,但 obj1 可以是未定义的,obj2 也是如此
    • 你也可以应用检查,比如:props.reducer?.obj1。我已经更新了答案
    【解决方案2】:

    看看:https://redux-saga.js.org/

    它可以让您异步运行您的操作,因此您可以等待您需要的更改,然后以您想要的结果完成您的操作。您还可以对其进行设置以查看操作是成功还是失败。

    如果您对它的工作原理感到好奇,YouTube 上有很多很好的教程。

    【讨论】:

    • 谢谢!但这不是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2022-10-19
    • 2017-05-14
    • 2021-10-06
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    相关资源
    最近更新 更多