2017-10-18 9 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の両方でOKですか? (アンチパターンや状態の混乱はない?)。私は確認するための文書を見つけることができませんが、私はStephen Grider Reactコースからどちらかといえば違いがないことを覚えています。

[編集]:ここに最終的な解決策があります。私は、そのFormik、特定のコンテキストに含まれます:Reduxのは、アクションの作成者を正しく呼び出していないに起因する状態変化をトリガされなかったため

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

フライングは、正しいです。

答えて

1

アクション作成者を直接呼び出すことはできますが、この場合は、Reduxアクション作成者ではなく、単純な関数として呼び出されます。 connect()のドキュメントからわかるように、そのmapDispatchToProps引数は、実際のアクション作成者になるReduxのdispatch()でアクションクリエータをラップすることを可能にする関数を受け入れます。

だから、Reduxのためのアクションの作成者はあなたがdispatch(updateField())代わりのupdateField()を呼び出すことによって、自分でReduxののdispatch()にそれらをラップしたりReduxのからbindActionCreatorsを使用呼び出すためにどちらかの必要があるとして、あなたの行動クリエータ関数を使用することができるようにします。

関連する問題