react-reduxは、コンポーネントが予測可能とパフォーマンスの方法でReduxのストアから値を得ることができますライブラリです。それが提供する主なツールは、connect
と呼ばれる関数です。これは、Reduxコンポーネントをラップし、ストア値を小道具として提供します。リンク先のコードの重要な部分は、下部にあります:https://github.com/bigardone/phoenix-trello/blob/master/web/static/js/views/sessions/new.js#L70-L74。
counter
という名前のReduxストアに値があるとします。あなたはそれが変更されたとき、あなたのコンポーネントCounterDisplay
がこの値、および更新について知りたい:
class CounterDisplay extends Component {
render() {
const { counter, dispatch } = this.props
return (
<div>{counter}</div>
)
}
}
あなたが明示的に「昔ながらの方法」小道具に値を入れていない限り、これらの変数が未定義であることを行っています
connect
の出番だ
<CounterDisplay counter={1} dispatch={() => {}} />
。それは、(しばしば呼ばれる別のコンポーネントProvider
を使用して)Reduxの店を知っていて、それがラップのコンポーネントの小道具にそれから値を配置することができます。高次コンポーネント(HOC)と呼ばれるものを返します。特定の機能(この場合は店舗への接続)を実行するために別のコンポーネントをラップします。
ここでは、小道具にcounter
値を取得したい方法は次のとおりです。
function mapStateToProps (state) {
// Slightly confusingly, here `state` means the entire application
// state being tracked by Redux... *not* CounterDisplay's state
return {
counter: state.counter
}
}
export default connect(mapStateToProps)(CounterDisplay)
代わりCounterDisplay
自体をエクスポートするので、我々はHOCをエクスポートします。 counter
に加えて、connect
は自動的にdispatch
関数を小道具に挿入して、コンポーネント内でそれを利用することができます。それはあなたが見ているソースで見ている動作です。
私は理解していますが、どのようなエクスポートのデフォルト接続(...)(SessionNew)が何をしているのかは100%明確ではありません。それを詳細に説明できますか? –
@coolbreezeこの情報はお役に立ちましたか?https://www.sohamkamani.com/blog/2017/03/31/react-redux-connect-explained/ –
https:// reduxで詳しくお読みください。 js.org/docs/basics/UsageWithReact.html 主なアイデアは、connectは、どんなコンポーネントであれ、それをdispatchプロパティで拡張する(コンポーネントをラップする別のリアクションコンポーネントを返す)関数です。また、stateからコンポーネントにいくつかのプロパティをマップし、mapDispatchToPropsとmapStateToPropsを使用してディスパッチでアクションをバインドすることもできます – MistyK