2017-04-07 9 views
3

アクションをディスパッチする送信ボタンがあります。アクションのペイロードは、APIに送信されるポストデータです。現在、私はmapDispatchToPropsbindActionCreatorsを使用します。mapDispatchToPropsのバインドアクションパラメータ

const mapDispatchToProps = (dispatch) => ({ 
    actions: bindActionCreators(FormActions, dispatch) 
}); 

その後、私のコンポーネントで、私は提出アクションにonClickをバインド:

<input type="submit" onClick={() => this.props.actions.submit(this.props.postData)} /> 

私はこのコンポーネントにmapStateToPropsでポストデータを与えるために持っていることを好きではありません。

<input type="submit" onClick={this.props.submit} /> 

これが可能である:私はちょうどコンポーネントにすでにそれは使用量が次のようになりますので、提出する関数にバインドさポストデータを持っているアクションを与えることを好むだろうか?私はあなただけで説明したような場合に使用することになっているreact-reduxconnect方法でmergePropsと呼ばれる3番目の引数がありmapDispatchToProps

+0

データがすでに店舗内にある場合は、レデューサーから読み取るだけではどうですか? – ZekeDroid

+0

データは親の小道具、またはmapStatetoPropsから来ていますか? – FakeRainBrigand

+0

@FakeRainBrigandデータは 'mapStateToProps'から得られます。 – Dave

答えて

3

状態にアクセスすることはできません。 ComponentがactionspostData、ちょうどsubmitを受信しません

const mapStateToProps = state => ({ postData: ... }); 

const mapDispatchToProps = (dispatch) => ({ 
    actions: bindActionCreators(FormActions, dispatch) 
}); 

const mergeProps = (stateProps, dispatchProps) => ({ 
    submit:() => dispatchProps.actions.submit(stateProps.postData), 
}); 

const ConnectedComponent = connect(mapStateToProps, mapDispatchToProps, mergeProps)(Component); 

注:あなたのケースでは、あなたのような何かを行うことができます。

+3

'mergeProps'の使用は、パフォーマンスが悪いので一般的には使用しないことに注意してください。ストアが変更されるたびに関数を再作成し、コンポーネントが毎回再レンダリングするようにします。 – markerikson

+0

@markerikson return function prop 'mergeProps'は、' mapStateToProps'から返されるものとは異なります。どちらの場合でも再レンダリングを防ぐために、呼び出しの間に同じ関数インスタンスが返されていることを確認する必要があります。少なくとも私は[コード行](https://github.com/reactjs/react-redux/blob/f892ec00d7e92ff7afb21498276472f0e3b000c5/src/connect/mergeProps.js#L18)から結論づけることができます。私が間違っていれば私を修正してください。 – fkulikov

+1

カップルのもの。まず、 'mapState'ではなく' mapDispatch'でしょう。第2に、 'mergeProps'が渡され、' mergeProps'にfuncを宣言すると、 'mergeProps'が実行するたびに新しい関数参照になります。' mapDispatch'はcomp initで一度だけ実行されます(または、 'mapDispatch'の2つの引数形式が使用されている場合に変更します)。 (私は間違っている可能性がありますが、99%が実際の動作であることを確信しています)。 – markerikson

関連する問題