2017-01-21 12 views
0

私の反応コンポーネントでは、標準アクションとownPropsで受け取った関数を組み合わせることができますか?それ、どうやったら出来るの?フォローアップの質問は、ownPropsでは、オブジェクトと関数を得ることができるということです。私は誤ってオブジェクトを自分の行動に入れないようにしたいと思っています。機能だけが自分の行動に入るはずです。組み込み関数はmapDispatchToPropsのownPropsから来ました

最終的には、this.props.actions.standardAction1またはthis.props.actions.actionReceivedThruOwnPropsと入力する必要があります。

import React, {Component} from 'react'; 
import {connect} from 'react-redux'; 
import {bindActionCreators} from 'redux'; 

import * as standardActions from '../actions/standardActions'; 

class MyComponent extends Component { 

    constructor(props) { 

     super(props); 
    } 

    render() { 

     return(
      <div>Something goes here...</div> 
     ); 
    } 
} 

function mapStateToProps(state) { 
    return { 
     something: state.something 
    } 
} 

function mapDispatchToProps(dispatch, ownProps) { 
    return { 
     actions: bindActionCreators(standardActions, dispatch) 
    }; 
} 

export default connect(mapStateToProps, mapDispatchToProps)(MyComponent) 

答えて

0

あなたはFUL持っています最後の小道具がどのようにコンポーネントに渡されたかについての制御は、次のようになります。 react-reduxデコレータ/関数connectの3番目の引数を使用することができます。

マップされた状態をmapStateToPropsから、バインドされたアクションをmapDispatchToPropsから、自分の小道具を親からコンポーネントに渡して定義する関数を定義します。その後、望むようにそれらをマージします。

function mapStateToProps(state) { 
    return { 
     something: state.something, 
    } 
} 

function mapDispatchToProps(dispatch, ownProps) { 
    return { 
     ...bindActionCreators(standardActions, dispatch), 
    }; 
} 

function mergeProps(stateProps, dispatchProps, ownProps) { 
    return { 
     ...ownProps, 
     state: stateProps, 
     actions: { 
      ...dispatchProps, 
      ...ownProps.actions, 
     }, 
    }; 
} 

connect(
    mapStateToProps, 
    mapDispatchToProps, 
    mergeProps 
)(SuperComponent) 
+0

何らかの理由で、これは "props.actions"の下のすべてのアクションを結合していません。私は "this.props.myFunction"ではなく "this.props.actions.myFunction"として渡す関数を見ています。それほど大きな取引ではありませんでしたが、結局私はそれらをすべて「行動」の下に組み込むことを望んでいました。なぜそれを組み合わせることができないのでしょうか? – Sam

+0

コンポーネントに渡されたpropsの形状、 'mapStateToProps'、' mapDispatchToProps'、そして最後に 'mergeProps'を書き留めて、それらをどのように組み合わせるかを見ることができます。 – Andreyco

0

あなたがこれを行うことができますが、私は関数がownPropsに存在する方法については本当にわからないんだけど:

function mapDispatchToProps(dispatch, ownProps) { 
    return { 
     actions: { 
     ...bindActionCreators(standardActions, dispatch),  
     ...ownProps 
     } 
    }; 
} 

あなたが関数からのアクションを分けたい場合は、あまりにもこれを確認がownPropsから来た:

function mapDispatchToProps(dispatch, ownProps) { 
    return { 
     actions: bindActionCreators(standardActions, dispatch),  
     ownProps: ownProps, 
     } 
    }; 
} 

、その後、あなたがそのようにそれを呼び出す:this.props.ownProps.actionReceivedThruOwnProps

+0

オブジェクトを関数から切り離す方法をまだ理解する必要がありますが、これで前進するのに役立ちます。時にはソリューションのシンプルさが私の心を揺さぶる!再度、感謝します! – Sam

+0

ようこそ – challenger

関連する問題