Redux 动作中的条件分派创建者

Redux 动作中的条件分派创建者,redux,react-redux,Redux,React Redux,我正在一个绑定的actions creator中执行基本验证 const mapDispatchToProps = { onSomething: (props) => { if (performValidation(props)) { return { type: 'SOME_ACTION' }; } } }; 如果验证失败,并且我没有将操作返回给dispatch,则我收到了错误 动作必须是普通对象。使用自定义中间件

我正在一个绑定的actions creator中执行基本验证

const mapDispatchToProps = {
    onSomething: (props) => {
        if (performValidation(props)) {
            return { type: 'SOME_ACTION' };
        }
    }
};
如果验证失败,并且我没有将操作返回给dispatch,则我收到了错误

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


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

不,thunk是正确的方法。当绑定任何动作创建者时,将调用该动作创建者,并将输出直接传递到
dispatch
。将条件逻辑放入“普通”操作创建者意味着它可能返回
undefined
,从而执行
dispatch(undefined)


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

不,thunk是正确的方法。当绑定任何动作创建者时,将调用该动作创建者,并将输出直接传递到
dispatch
。将条件逻辑放入“普通”操作创建者意味着它可能返回
undefined
,从而执行
dispatch(undefined)


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

我也这么认为。不应该忽略未定义的。这将允许像上面那样的条件分派,而不需要中间件。
dispatch()
的约定是,除了到达减速器的普通JS对象之外,任何其他对象都被视为错误,周期。中间件可以“教导”
dispatch
接受非普通对象值,方法是阻止它们到达减缩器,或者沿途转换它们
redux thunk
查找函数,调用它们,不沿中间件管道转发它们。您可以很容易地编写一个中间件来捕获未定义的值,但这与核心存储的API契约行为是分开的。不应该忽略未定义的。这将允许像上面那样的条件分派,而不需要中间件。
dispatch()
的约定是,除了到达减速器的普通JS对象之外,任何其他对象都被视为错误,周期。中间件可以“教导”
dispatch
接受非普通对象值,方法是阻止它们到达减缩器,或者沿途转换它们
redux thunk
查找函数,调用它们,不沿中间件管道转发它们。您可以很容易地编写一个中间件来捕获未定义的值,但这与核心存储的API契约行为是分开的。