質問のコードは下記のように書かれているのと同じです。
JavaScript
1const mapStateToProps = () => ({});
2const mapDispatchToProps = {
3 move: move
4};
5
6export default connect(
7 mapStateToProps,
8 mapDispatchToProps
9)(Notes);
※ move
は別ファイルからimportしているAction Creatorです。
mapStateToProps
やmapDispatchToProps
はそういう名前の関数やObjectがあるわけではなく、そういう機能に該当した関数やObjectを指定すると言うことです。直接書いても良いですし、変数に入れてから使用しても問題ありません。
mapStateToProps
で指定するのは関数です。これは、引数としてstateと(親コンポーネントから送られてきた)自身宛のprops(省略可)を受け取り、指定の子コンポーネント(質問のコードではNotesコンポーネント)へ渡すpropsを返す関数になります。() => ({})
はどんなstateやpropsを受け取ったとしても、引数は無視して、常に{}
という空のObjectを返します。つまり、この部分では子コンポーネントにはpropsは何も渡さないとなります。
※ 自身宛のpropsは省略する場合が多いです。
※ ここで関数を指定するとstoreが購読され、storeの変更の度に呼び出されます。購読させたくなければ、null
またはundfeined
を使う必要があります。該当のコードがなぜnull
またはundefined
を使っていないのかはわかりません。
mapDispatchToProps
で指定するのは関数またはObjectです。関数の場合は、引数としてdispatch関数と(親コンポーネントから送られてきた)自身宛のprops(省略可)を受け取り、指定の子コンポーネント(質問のコードではNotesコンポーネント)へ渡すpropsを返す関数になります。dispatch関数が引数と渡されますので、dispatch関数を実行する関数が値となるpropsを作成できるのが特徴です。ここで作ったpropsを、子コンポーネントのイベントに結びつけると、イベント発生時にdispatchが実行され、Reduxの仕組みによりstoreの更新、購読しているコンポーネントの再レンダリングが行われます。また、Objectを指定することもできます。この場合は、同名のAction Creatorをdispatchする関数を値としたpropsを作成します。
Objectを渡す部分は少しわかりにくかったと思います。質問のコードの{move}
部分は
JavaScript
1(dispatch) => ({
2 move: (...args) => {dispatch(move(...args))}
3})
というような感じになっているということです。
そして最後に、connect
は、自身宛のprops、mapStateToProps
で作成したprops、mapDispatchToProps
で作成したprops、この三つのpropsをマージして子コンポーネントに渡します。(マージの仕方は第三のオプションとして変更可能です)
その他、詳しいことは下記参考にあるAPIドキュメントを確認してみてください。
参考: connect() - react-redux API
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/06 06:06