是否可以直接调用动作创建者而不是通过mapStateToProps调用



我觉得答案应该是肯定的,但我只是想确定一下。

我有这些动作创建者导入:

import {
    updateField,
    goBackOneStep,
    finishStep
} from './signup_actions'

然后,在这个视图的底部,我之前有这个:

export default connect(mapStateToProps, {
    updateField,
    goBackOneStep,
    finishStep
})(InputTel)

我打电话给this.props.finishStep(INPUT_TEL, { tel }, null)

但是,后来我修改了视图以利用 Formik,它似乎更喜欢处理来自其 HOC 的提交操作,所以现在我有了这个:

export default connect(mapStateToProps, {
    updateField,
    goBackOneStep
})(withFormik({
    validate,
    validateOnBlur: true,
    validateOnchange: true,
    handleSubmit: ({ tel }) => finishStep(INPUT_TEL, { tel }, null)
})(InputTel))

我只是直接从导入调用动作创建者。这在 React 和 React Native 中都可以吗?(没有反模式或状态混淆?我找不到任何文档来确认,但我很确定我记得从 Stephen Grider React 课程中,无论哪种方式调用它都没有区别。

[编辑]:这是最终的解决方案。由于其特定于 Formik 的上下文,我将包括它:

export default connect(mapStateToProps, {
    updateField,
    goBackOneStep,
    finishStep
})(withFormik({
    validate,
    validateOnBlur: true,
    validateOnChange: true,
    handleSubmit: ({ tel }, { props }) => props.finishStep(INPUT_TEL, { tel }, null)
})(InputTel))

飞行是正确的,因为 Redux 由于未正确调用动作创建者而未触发状态更改。

您可以直接调用您的动作创建者,但在这种情况下,它将作为简单函数调用,而不是作为 Redux 动作创建者调用。正如您从connect()文档中看到的那样 - 它的mapDispatchToProps参数接受允许将动作创建者与 Redux 的dispatch()包装在一起的函数,使他们成为实际的动作创建者。

因此,为了能够将您的动作创建器函数用作 Redux 的动作创建者,您需要通过调用 dispatch(updateField()) 而不是 updateField() 来调用将它们自己包装到 Redux 的dispatch()中,或者从 Redux 使用bindActionCreators

相关内容

  • 没有找到相关文章

最新更新