我觉得答案应该是肯定的,但我只想确定。
我有这些动作创建者导入:
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课程中记得,无论如何都没有任何区别。
[edit]:这是最终的解决方案。由于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没有因为没有正确调用动作创建者而触发状态更改。
答案 0 :(得分:2)
您可以直接调用您的动作创建者,但在这种情况下,它将被称为简单函数,而不是Redux动作创建者。正如您从connect()
文档中看到的那样,它的mapDispatchToProps
参数接受允许使用Redux的dispatch()
包装您的动作创建者的功能,使其成为实际的动作创建者。
为了能够将您的动作创建者功能用作Redux的动作创建者,您需要通过调用dispatch()
而不是dispatch(updateField())
来调用将它们包装到Redux的updateField()
中或使用来自Redux的bindActionCreators
。