Reactにおけるコンポーネント通信の詳細な説明

Reactにおけるコンポーネント通信の詳細な説明

親コンポーネントは子コンポーネントと通信します

  • 親コンポーネントは状態を子コンポーネントに渡し、子コンポーネントはそれをプロパティとして受け取ります。親コンポーネントの状態が変化すると、子コンポーネントが受け取るプロパティも変化します。
  • 親コンポーネントは ref を使用して子コンポーネントをマークし、子コンポーネントのメソッドを呼び出して子コンポーネントの状態を変更します。親コンポーネントは子コンポーネントのメソッドを呼び出すこともできます。

親グループ内のref参照を定義する

'react' から React,{Component,createRef} をインポートします。
'./Child1' から Child1 をインポートします
デフォルトクラスAppをエクスポートし、Componentを拡張します。
    コンストラクタ(props){
        スーパー(小道具)
        this.child = createRef()
    }
    与える(){
        戻る(
            <div>
                <Child1 ref={this.child}/>
                <ボタンのonClick={this.fn.bind(this)}></ボタン>
            </div>
        )
    }
    関数(){
        const 子 = this.child.current
        子.setTitle()
    }
}

サブコンポーネントはデータソースとデータソースの変更方法を定義します

React をインポートします。{Component} を 'react' からインポートします。
エクスポートデフォルトクラスChild1はComponentを拡張します{
    状態={
        title:'タイトル'
    }
    与える(){
        戻る (
            <div>
                {この州のタイトル}
            </div>
        )
    }
    タイトルを設定する(){
        this.setstate({title:'hh'})
    }
}

子コンポーネントは親コンポーネントと通信します

親コンポーネントは、独自のメソッドの 1 つを子コンポーネントに渡します。メソッドでは、状態の変更など、何でも実行できます。子コンポーネントは、 this.propsを通じて親コンポーネントのメソッドを受け取り、それを呼び出します。

コンポーネント間の通信

React には、この問題を解決するための Vue のようなイベント バスがありません。 1 つの方法は、共通の親コンポーネントを使用してプロキシ経由で実装することですが、プロセスは非常に面倒になります。 React は、コンポーネント ツリーの各レイヤーにプロパティを明示的に渡すことなく、コンポーネント間の通信を実現するための Context を提供します。

複雑な非親子コンポーネント通信はReactでは扱いにくく、複数のコンポーネント間でのデータ共有も扱いにくい。実際の作業では、flux、redux、mobxを使用して実装します。

先祖と子孫

  1. createContext で Provider、COnsumer をエクスポートするストア クラスを定義します。
  2. 祖先ノードにメッセージを公開する: プロバイダー値 = 任意のデータ
  3. 子孫ノードでサブスクライブ: コンシューマー コールバック関数 {value=>(component)}
    1. データソースストアを定義する
    ストア
React をインポートし、 'react' から {createContext} を作成します。
{プロバイダー、コンシューマー} = createContext() を作成します。
輸出 { 
    プロバイダー、//パブリッシュ コンシューマー //サブスクライブ}

2. 祖先ノード

'react' から React 、{Component} をインポートします。
'./store' から {Provider,Consumer} をインポートします。
'./Son' から Son をインポートします
デフォルトクラスAppをエクスポートし、Componentを拡張します。
    コンストラクタ(props){
        スーパー(小道具)
        this.state={
            名前:'mingcen'
        }
    }
    与える(){
        戻る (
            <div>
                <プロバイダー値={this.state.name}>
                    <息子/>
                </プロバイダー>
            </div>
        )
    }
}

3. 子孫ノード

React をインポートします。{Component} から 'react'
'./store' から {Consumer} をインポートします。
エクスポートデフォルトクラスSon1はComponentを拡張します{
    コンストラクタ(props){
        スーパー(小道具)
        this.state={
            名前:'ううう'
        }
    }
    与える(){
        戻る(
            <div>
                <消費者>
                   {
                        値=>{
                            <div>{値.名前}</div>
                        }
                   }
                </消費者>
            </div>
        )
    }
}

ブラザーノード通信

  • 子オブジェクトがイベントに添付されます
  • 不動産に掛かっているもう一つのもの
  • 別のコンポーネントのプロパティを変更することで、別のコンポーネントが受け入れるコンテンツを変更できます。

祖先

状態={
    カウント:1,
    setCount:()=>{
        this.setState(state=>{
            戻る {
                カウント:++状態.カウント
            }
        })
    }
}
与える(){
    {count,setCount} = this.state とします。
    戻る(
        <div>
            <プロバイダー値={{count,setCount}}>
                <Cmp1></Cmp1>
                <Cmp2></Cmp2>
            </プロバイダー>
        </div>
    )
}

ブラザーCmp2

React をインポートし、{ Component 、 createContext } を 'react' から取得します。
エクスポートデフォルトクラスCmp2はComponentを拡張します{
  // デフォルトデータのみ取得 --> プロバイダーコンポーネントにラップされていません static contextType = createContext
  与える() {
    戻る (
      <div>
        <button onClick={this.setCount.bind(this)}>データの自動増加</button>
      </div>
    )
  }
  setCount() {
    this.context.setCount()
  }
}

ブラザーCmp1

<消費者>
    {
        値 => <h3>{value.count}</h3>
    }
</消費者>

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • React親子コンポーネント通信実装方法
  • Reactにおけるネストされたコンポーネントとネストされたコンポーネント間の通信プロセス
  • Reactコンポーネント通信の例
  • コンポーネント間の内部通信のReactデータ転送方法
  • Reactにおけるコンポーネント通信のいくつかの方法の詳細な説明
  • React 開発チュートリアル: React コンポーネント間の通信
  • Reactにおけるコンポーネント通信の問題の詳細な説明
  • Reactコンポーネント間の通信のサンプルコード
  • React コンポーネント間で通信する 3 つの方法 (シンプルで使いやすい)

<<:  マークアップ言語 - テキストの CSS スタイルを指定する

>>:  Xmeter APIインターフェーステストツールの使用状況の分析

推薦する

MySQLデータベースインデックスの詳細な説明

目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...

便利で使いやすいウェブアプリケーションを設計するための 10 のヒント

より使いやすい Web アプリケーションを設計するための 10 のヒントをご紹介します。ヒント1: ...

Python スクリプトを Ubuntu で直接実行する方法

翻訳プログラムを例に挙げてみます。前回はWindowsでのアプリケーションのパッケージ化についてお話...

知っておくべき 25 の Vue のヒント

目次1. プロパティを型リストに制限する2. デフォルトのコンテンツと拡張ポイント3. ネストされた...

docker view container log コマンドの実装

なぜログを読む必要があるのでしょうか?たとえば、コンテナの起動に失敗したがプロンプトが表示されない場...

MySQLの明示的な型変換の簡単な分析

CAST関数前回の記事では、型変換を表示するために使用する CAST 関数について説明しました。暗黙...

柔軟で安定した高品質の HTML および CSS コード標準を作成するためのガイド

黄金律常に同じコーディング標準セットに従ってください。同じプロジェクトに何人の人が関わっているかに関...

MySQL 最適化技術における Limit クエリの最適化分析

序文実際のビジネスでは、ページングは​​一般的なビジネス要件です。次に、制限クエリを使用します。制限...

jQueryとCSSを組み合わせてトップに戻る機能を実現

CSS操作 CS $("").css(名前|プロ|[,値|関数]) 位置$(&q...

Tomcat 実行時の JVM エンコーディングの問題を修正

質問:最近、プロジェクトを展開すると文字化けしたデータが出てきました。確認したところ、プロジェクトは...

Vue3はCSSの無限シームレススクロール効果を実装します

この記事では、CSS無限シームレススクロール効果を実現するためのvue3の具体的なコードを参考までに...

MySQLデータベースのnullに関する知識ポイントのまとめ

MySQL データベースでは、null は一般的な状況です。MySQL での null に関する注意...

ミニプログラムカスタムコンポーネントの非効率的なグローバルスタイルの解決策

目次長すぎて読めないコンポーネントスタイルの分離デモテスト優先度ページの分離構成参考文献ネイティブ ...

CSS3 オーバーフロープロパティの説明

1. オーバーフローOverflow はオーバーフロー(コンテナ)です。コンテンツがコンテナを越える...

MySQL ログの設定と表示方法

MySQL には次のログがあります。エラーログ: -log-errクエリログ: -logスロークエリ...