2017-10-18 21 views
0

我覺得這個問題的答案應該是肯定的,但我只是想確認一下。可以直接調用動作創建器而不是通過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)) 

飛行是正確的,因爲終極版沒有觸發由於沒有正確調用行動的創建者的狀態變化。

回答

1

您可以直接打電話給你的行動創造者,但在這種情況下,它會被稱爲一個簡單的功能,而不是終極版行動的創建者。你可以從connect()文檔看 - 它mapDispatchToProps參數接受功能,可以與終極版的dispatch()這使得他們的實際行動創造者包裹你的行動創造者。

所以能夠作爲終極版動作的創造者,你需要通過調用dispatch(updateField())而不是updateField()要麼調用它們包裝成終極版的dispatch()自己或使用bindActionCreators從終極版使用您的行動創造者的功能。

相關問題