react-reduxのconnectとは何なのか

だいぶ端折っているので本家を読んだほうがいいです。

何なのか

簡単に言えばReactComponentをReduxのStoreに繋ぐもの。ReactComponent自体には手を加えず、Reduxに接続された新しいComponentを返す。ReduxではContainerと呼ばれる。

できること

引数として以下を渡すことができる。

  • mapStateToProps
  • mapDispatchToProps
  • mergeProps
  • options

特に重要なのはmapStateToPropsとmapDispatchToPropsである。

mapStateToProps

Storeが更新される度に呼ばれる。つまり、アプリの状態が変化したときのコールバック。Reactを単体で使用した場合、イベントが発生したらルートのComponentから末端のComponentまでバケツリレーしながら状態を変化させなければならないが、それをしないですむようになる。 mapStateToPropsが返す値はプレーンなObjectでなければならない。Storeを監視したくなければnull/undefinedを返せば良い。

mapDispatchToProps

ReduxComponentのイベントとReduxのActionを結びつける。

mergeProps

mapStateToProps()、mapDispatchToProps()、親コンポーネントのpropsの結果が渡される。つまり決定したpropsをここで改変することができる。省略すると Object.assign({}、ownProps、stateProps、dispatchProps) が呼ばれる。

options

connectorの振る舞いを変えることができる。

  • pure(Boolean) … propsが変更されていない場合、再レンダリングを行わない。デフォルトは true
  • areStatesEqual(Function) … pureのstateが等しいか判定基準となる関数。デフォルトは ===
  • areStatePropsEqual(Function) … pureのpropsが等しいか判定基準となる関数。デフォルトは shallowEqual
  • areStatePropsEqual(Function) … pureのmapStateToPropsが等しいか判定基準となる関数。デフォルトは shallowEqual
  • areMergedPropsEqual(Function) … pureのmergedPropsが等しいか判定基準となる関数。デフォルトは shallowEqual