コンテキストの定義と目的コンテキストは、コンポーネント ツリーにプロパティを明示的に渡すことなく、コンポーネント間でデータを共有する方法を提供します。 アプリケーション シナリオで共有する必要があるデータは何ですか?
使い方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 のダウンロードとインストール構成のグラフィック チュートリアル
目次設定を追加json 構成レイヤー構成の表示論理層の構成位置追跡をオンにする録音を開始開始座標を決...
序文Oracle や SQL Server などのデータベースには、ストレージ エンジンが 1 つだ...
序文最近 Linux を学び、その後 Win から Ubuntu に変更しました。以前インストールし...
この記事の例では、Appleの電卓を実装するためのJSの具体的なコードを参考までに共有しています。具...
1. WEBでサポートされている画像形式: GIF: 256色を保存でき、透明色をサポートし、アニメ...
1. LinuxサーバーのDocker構成ファイルを変更する vim /usr/lib/system...
ここでは、フォーム要素とフォーム送信に関する知識を紹介します。フォーム要素フォーム要素の DOM イ...
図に示すように: しかし、IE6で表示すると、right:1px:になります。 IE6 には、幅と高...
目次概要計算された監視プロパティを監視する要約する概要Vue プロジェクトでは、computed と...
MySQL データベース管理ソフトウェアには、エンタープライズ エディションとコミュニティ エディシ...
開発中にサーバーを起動する必要がある場合、ローカルテストではポートを直接書き込み、実際の環境ではバイ...
解決策 1: HEAD に次のコードを挿入するなど、HTML ドキュメントで条件付きインポートを使用...
今日ログインページを書いていたとき、個人情報と携帯電話番号を認証する必要がありましたが、ページにボタ...
目次背景分析する方法背景MySQL は 26 日の 16:23:49 に大量のスロー クエリを生成し...
この点呼装置は簡易版であり、自動停止の必要性を考慮していないため、点呼を開始した後、停止ボタンをクリ...