コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コンポーネント間でデータを共有する方法を提供します。 アプリケーション シナリオで共有する必要があるデータは何ですか?
使い方1. コンテキストの作成と初期化 定数MyContext = createContext(デフォルト値); Context オブジェクトを作成します。 React がこの Context オブジェクトをサブスクライブするコンポーネントをレンダリングすると、コンポーネントはコンポーネント ツリー内で自身に最も近い一致する 2. コンテキストを購読する <MyContext.Provider value={/* 何らかの値*/> プロバイダーは ここでは2つの関連する概念がある
3. Conextを使用する 3.1 Reactコンポーネントでの使用 定数値 = useContext(MyContext); 消費コンポーネント内のコンテキストを参照します。 value は、コンポーネント ツリー内で自身に最も近い一致するプロバイダーから現在のコンテキスト値を読み取ります。 3.2 純粋機能コンポーネントでの使用 純粋に機能的なコンポーネントでは、 <MyContext.コンシューマー> {value => /* コンテキスト値に基づいてレンダリング */ </MyContext.Consumer> 4. コンテキストの更新 4.1 上から下へのコンテキストの更新 トップダウン更新とは、プロバイダーの値を更新することを指します。プロバイダーの //アプリ.js // .... デフォルト関数App()をエクスポートする{ //... // const {contextValue, setContextValue} = React.useState(initialValue); // コンテキスト値を更新する関数 関数 updateContext(newValue) { // ... // contextValue、ConsumerComponent1、ConsumerComponent2、ConsumerComponent3、ConsumerComponent11 を更新すると、再レンダリングがトリガーされます。 setContextValue(新しい値) } ... 戻る ( <アプリ> <MyContext.Provider 値 = {contextValue}> <コンシューマーコンポーネント1> <コンシューマーコンポーネント11> // .... </コンシューマーコンポーネント11> </コンシューマーコンポーネント1> <コンシューマーコンポーネント2 /> <コンシューマーコンポーネント3 /> </MyContext.Provider> </アプリ> ); } 4.2 ボトムアップ(消費コンポーネントから)コンテキスト更新 場合によっては、 // アプリ.js デフォルト関数App()をエクスポートする{ ... const {contextValue, setContextValue} = React.useState(initialValue); // コンテキスト値を更新する関数 関数 updateContext(newValue) { // ... // contextValue、ConsumerComponent1、ConsumerComponent2、ConsumerComponent3、ConsumerComponent11 を更新すると、再レンダリングがトリガーされます。 setContextValue(新しい値) } ... 戻る ( <アプリ> <MyContext.Provider 値 = {contextValue}> <コンシューマーコンポーネント1> <ConsumerComponent11 updateValue={updateContext}> // コールバック プロパティを通じて ConsumerComponent11 の contextValue を更新します。contextValue は最上位レベルの Provider の値に属しているため、ConsumerComponent1、ConsumerComponent2、および ConsumerComponent3 の再レンダリングもトリガーされます。 </コンシューマーコンポーネント11> </コンシューマーコンポーネント1> <コンシューマーコンポーネント2 /> <コンシューマーコンポーネント3 /> </MyContext.Provider> </アプリ> ); } 4.3 プロバイダのネスト 場合によっては、同じコンテキストのプロバイダーがネストされ、2 つのコンテキストとして認識されることがあります。違いは、 ... React のコンテキスト値を設定します。 // コンテキスト値を更新する関数 関数 updateContext(newValue) { // ... // contextValue、ConsumerComponent1、ConsumerComponent2、ConsumerComponent3、ConsumerComponent11 を更新すると、再レンダリングがトリガーされます。 setContextValue(新しい値) } ... 戻る ( <アプリ> <MyContext.Provider 値 = {contextValue}> <コンシューマーコンポーネント1> <コンシューマーコンポーネント11 /> </コンシューマーコンポーネント1> <コンシューマーコンポーネント2> ... // ConsumerComponent21 と ConsumerComponent22 の値のみを更新する場合 const localContextValue = useContext(MyContext); // 上位層プロバイダーから現在の値を取得します const {tempContextValue, setTempContextValue} = React.useState(localContextValue); 関数 updateTempContext(newValue) { // ここでの更新は ConsumerComponent21 と ConsumerComponent22 の再レンダリングのみをトリガーします setTempContextValue(newValue); } // ここで ConsumerComponent21 と ConsumerComponent22 間でデータを共有するための新しいプロバイダーを作成します。 <MyContext.Provider 値 = {tempValue}> <コンシューマーコンポーネント21> // ConsumerComponent21 で useContext(MyContext) 経由でサブスクライブします // 取得される値は、自身に最も近い一致するプロバイダーから読み取られたコンテキスト値、つまり tempValue です </コンシューマーコンポーネント21> <コンシューマーコンポーネント22> </コンシューマーコンポーネント22> </MyContext.Provider 値 = {contextValue}> </コンシューマーコンポーネント2> <コンシューマーコンポーネント3 /> </MyContext.Provider> </アプリ> ); 公式ドキュメント 公式ドキュメントについては、以下の基本および上級チュートリアルを参照してください。 フック API インデックス – React (reactjs.org) コンテキスト – React (reactjs.org) 上記は、React における Context アプリケーション シナリオの分析の詳細な内容です。React における Context の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Ubuntu 18.04 に MySQL をインストールする (グラフィカル チュートリアル)
>>: Windows 10 での MySQL 8.0 のダウンロードとインストール構成のグラフィック チュートリアル
問題/障害/シナリオ/要件Eve-ng の仮想マシン OVA のハードディスクは 38G しかないた...
同時アクセスの場合、非反復読み取りやその他の読み取り現象が発生する可能性があります。高い同時実行性に...
具体的な方法: (推奨チュートリアル:MySQLデータベース学習チュートリアル)テーブルロックの状態...
オペレーティング システム: windows10_x64 Python バージョン: 3.6.8仮想...
この記事は主に、以前のインストール方法を使用して MySQL 5.7.14 をインストールするときに...
この記事では主にTomcatプロセスを記録し、TCP接続が多すぎることによるCPU使用率の過剰のトラ...
ここ数年、ウェブサイト開発では DIV+CSS が非常に人気があり、当時は大きな騒動を引き起こしまし...
まず、yumを使ってCentOSにPHPをインストールする方法を紹介します。 1. PHPのyumソ...
必要な環境をインストールする1. gccのインストールnginx をインストールするには、公式サイト...
目次要件の説明問題の説明問題分析問題解決質問の拡張要件の説明このプロジェクトでは、まずユーザーが質問...
目次プロジェクトディレクトリDockerファイルファイルの展開画像を生成するコンテナを起動するウェブ...
1. 概要Group by は、by の後の規則に従ってデータをグループ化することを意味します。いわ...
1. CentOSイメージをダウンロードする1.1 ダウンロードウェブサイトhttp://mirro...
この記事では、Jingdong製品詳細ページの虫眼鏡効果コンポーネントに似たvue3カプセル化の具体...
目次背景サーバーの依存関係バックエンド構成クロスドメインバックエンド構成の静的リソースアクセスではk...