2017-03-20 9 views
0

私はconnect docsをスキミングして、この例を理解しようとしています:actionCreatorsとmapDispatchToPropsを注入する利点は何ですか?

を注入するドスとすべてのアクションクリエイター

import * as actionCreators from './actionCreators' 

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

export default connect(mapStateToProps, actionCreators)(TodoApp) 

をここmapDispatchToProps必要はありませんなぜ? dispatchはどこですか?

私はアクション、dispatch、およびmapDispatchToPropsを理解していますが、私はアクションクリエイターと上記の構文について少し不明です。

答えて

1

あなたはObjectまたはFunctionを渡すことができます。

オブジェクトがを渡された場合、その内部の各機能は、Reduxのアクションの作成者であると想定されます。 Connectは、あなたのために俳優をdispatchに結びつけます。

import * as actionCreators from './actionCreators'; 

connect(mapStateToProps, actionCreators)(TodoApp) 

及び機能をを渡された場合、コンポーネント

this.props.someActionCreator(); 

に、それがディスパッチを説明します。何らかの形でディスパッチを使用して自分の方法でアクションクリエイターをバインドするオブジェクトを返すのはあなた次第です。 ReduxのbindActionCreators()ヘルパーを使用することができます。 ownPropsが第2引数として指定されている場合、その値はコンポーネントに渡された小道具になり、コンポーネントが新しい小道具を受け取るたびにmapDispatchToPropsが再度呼び出されます。

function mapDispatchToProps(dispatch) { 
    return { actions: bindActionCreators(actionCreators, dispatch) } 
} 

あなたはそれを省略した場合、デフォルトの実装では、ちょうどあなたのコンポーネントの小道具への発送を注入します。

は、コンポーネントに:

this.props.dispatch(someActionCreator()); 

source react-redux DOCS

したがって

、機能上actionCreatorsの対象を注入することの利点は、より便利且つ簡潔である成分

+0

にactionCratorsを渡す形Iまた、 './actionCreators ';からのactionCreatorsとしてのimport *は、実際には、'。/ actionCreators'でプロパティとしてエクスポートされた関数を持つオブジェクトと等しいactionCreatorsを設定することも重要です。したがって、この場合は、実装された最初の例です –