【问题标题】:Conditional Dispatch in Action CreatorsAction Creators 中的条件调度
【发布时间】:2017-10-17 18:07:23
【问题描述】:

我正在绑定动作创建器中执行基本验证。

const mapDispatchToProps = {
    onSomething: (props) => {
        if (performValidation(props)) {
            return { type: 'SOME_ACTION' };
        }
    }
};

如果验证失败并且我没有返回要发送的操作,我收到了错误。

动作必须是普通对象。使用自定义中间件进行异步操作。

这是预期的吗?我可以通过使用 thunk 来解决这个问题,但这对于非异步条件调度来说似乎有点过头了。

【问题讨论】:

    标签: redux react-redux


    【解决方案1】:

    不,thunk 是正确的方法。当任何动作创建者被绑定时,它被调用并且输出被直接传递给dispatch。将条件逻辑放入“普通”动作创建器意味着它可能会返回undefined,因此会返回dispatch(undefined)

    因此,如果您需要有条件地分派,要么不使用绑定的动作创建器并处理组件中的条件逻辑,要么分派一个 thunk 并将条件逻辑保留在 thunk 中。对我来说,这是一个很好的 thunk 用例。

    【讨论】:

    • 我想的也差不多。不应该调度只是忽略未定义。这将允许像上面这样的条件调度,而不需要中间件。
    • 没有。 dispatch() 的约定是,除了到达 reducer 的普通 JS 对象之外的任何东西都被认为是一个错误,句号。中间件可以“教”dispatch 接受非普通对象值,方法是阻止它们到达减速器,或者一路转换它们。 redux-thunk 查找函数,调用它们,而不是沿着中间件管道转发它们。您也可以轻松编写一个中间件来捕获未定义的值,但这与核心存储的 API 契约行为是分开的。
    猜你喜欢
    • 2020-03-05
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2018-03-05
    • 2016-03-09
    • 2021-08-13
    • 2017-11-28
    相关资源
    最近更新 更多