最終更新:2022-12-16 (金) 03:49:44 (496d)
React/コンテクスト
各階層で手動でプロパティを下に渡すことなく、コンポーネントツリー内でデータを渡す方法
https://ja.reactjs.org/docs/context.html
使い方
定義
- React.createContextでコンテクストを定義
const MyContext = React.createContext(defaultValue)
- defaultValueはコンポーネントがツリー内の上位に対応するプロバイダを持っていない場合のみ使用
参照する値を設定
- どの値を提供したい値をContext.Providerで指定 (JSX)
<MyContext.Provider value={/* 何らかの値 */}>
- Reactがコンテクストオブジェクトが登録されているコンポーネントをレンダーする場合、ツリー内の最も近い上位の一致するProviderから現在のコンテクストの値を読み取る
参照
- useContextして値を参照
React.createContext
useContext
React/コンテクストオブジェクト?
- 値が更新された場合はそのコンテクストをuseContextしているコンポーネントはすべて再レンダリング
構造
{ displayName: string; Provider: React.Component; Consumer: React.Component; }
データの流れ
- コンテキストのProviderがConsumerにデータを提供
Provider
- 親のJSXで定義
- プロパティとしてvalueを受け取る
<MyContext.Provider value={/* 何らかの値 */}>
Consumer
React/関数コンポーネント
- useContext
- 関数コンポーネント内でContext.Consumerを使える
React/クラスコンポーネント
複数のコンテクストを使用
- コンテクストの再レンダーを高速に保つために、React は各コンテクストのコンシューマをツリー内の別々のノードにする必要がある