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 MVCCメカニズム原理の詳細な説明

目次MVCCとはMySQL ロックとトランザクション分離レベルMySQL 元に戻すログMVCCの実装...

Linux のスケジュールタスク Crontab コマンドの使用に関する詳細な説明と概要

crontab コマンドは、Unix および Linux で定期的な実行命令を設定するために使用され...

MySQL における主キーが 0 であることと主キーの自己選択制約の関係についての詳しい説明 (詳細)

序文この記事は主にMySQLの主キー0と主キー自己排除制約の関係を紹介し、皆さんの参考と学習のために...

JavaScript ドキュメント オブジェクト モデル DOM

目次1. JavaScriptはページ内のすべてのHTML要素を変更できる1. IDでHTML要素を...

ページ要素の絶対位置と相対位置に関するある程度の理解

今日から、定期的にちょっとした豆知識を整理していきます。簡単なものもあるかもしれませんが、どれも役に...

CSS でのナビゲーション バーとドロップダウン メニューの実装

1. CSSナビゲーションバー(1)ナビゲーションバーの機能ナビゲーション バーを使いこなすことは、...

Docker イメージのプルとタグ操作 pull | tag

Fabric プロジェクトのソースコードを読み直してみたところ、Docker の部分でよくわからな...

フロントエンドに必要なNginx設定の詳細な説明

Nginx (エンジン x) は、軽量で高性能な HTTP およびリバース プロキシ サーバーであり...

MySQLの基本操作学習ノートテーブル

テーブルを作成テーブルテーブル名を作成create table if not exists 表名 m...

MySQLのバージョンアップ方法を超詳しく解説

目次1. はじめに2. データベースをバックアップする3. オリジナルのMysqlをアンインストール...

フロントエンド開発者のための HTML 入門

1 HTML入門1.1 初めてのコード体験、最初のウェブページの作成XML/HTML コードコンテン...

MySQL での limit の使用方法は何ですか (推奨)

SELECT * FROM テーブル名制限m,n; SELECT * FROM テーブル LIMI...

nestjs における例外フィルター Exceptionfilter の具体的な使用法

Nestjs 例外フィルターといえば、非常に強力な .Net のグローバル フィルターについて触れな...

MySQL 8.0.12 のインストールと設定のグラフィックチュートリアル

MySQL 8.0.12 のダウンロードとインストールのチュートリアルを録画し、全員と共有しました。...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...