我覺得這個問題的答案應該是肯定的,但我只是想確認一下。可以直接調用動作創建器而不是通過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))
飛行是正確的,因爲終極版沒有觸發由於沒有正確調用行動的創建者的狀態變化。