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インターフェーステストツールの使用状況の分析

推薦する

dockerでnginxを実行するときにdaemon offが使用される理由についての簡単な説明

とても嬉しいです。この問題に遭遇したとき、私はDockerコンテナのプロセス原理について話さなければ...

CSS を使用して物流の進行状況のスタイルを実装するためのサンプルコード

効果: CSS スタイル: <スタイル タイプ="text/css">...

MySQL タイムスタンプ比較クエリで遭遇する落とし穴と解決策

目次タイムスタンプ比較クエリで遭遇する落とし穴タイムスタンプクエリ範囲の問題タイムスタンプ比較クエリ...

HTMLシールドの右クリックメニューと左クリック入力機能の例

右クリックメニューを無効にする <body oncontextmenu=self.event....

Navicat for MySQLのスケジュールされたデータベースバックアップとデータ復旧の詳細

データベースの変更または削除操作によってデータ エラーが発生したり、データベースがクラッシュしたりす...

Dockerにelasticsearchとkibanaをインストールする方法

Elasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを知らないと軽蔑...

大きなオフセットによる MySQL 制限ページングが遅い理由と最適化ソリューション

MySQL では通常、limit を使用してページ上のページング機能を完了しますが、データ量が大きな...

mysql 5.6.21 のインストールと設定の詳細な手順

1. 概要MySQL バージョン: 5.6.21ダウンロードアドレス: https://dev.my...

Gobangゲームを実現するためのjsキャンバス

この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具...

Vue Nativeを使用したモバイルアプリケーションの構築プロセスの完全な記録

目次序文Vue Nativeの機能宣言的レンダリング双方向バインディングVue.js エコシステムの...

Linux zabbix エージェントの展開と設定方法の詳細な説明

1. web01にzabbix-agentをインストールするZabbix ウェアハウスをデプロイする...

Rancher で Kubernetes 用の標準化された VMware イメージを構築する方法

Kubernetes を学習するときは、Kubernetes 環境で練習する必要があります。ただし、...

jsはキャンバスに基づいて時計コンポーネントを実装します

圧縮アップロード画像、スクラッチカード、ポスター作成、チャートプラグインなど、フロントエンド開発にお...

ウェブページ内のFlash SWFファイルを変更する方法

これは多くの人が遭遇した問題だと思います。実際、Web ページから FLASH をダウンロードして修...

よくある HTML タグの記述エラー

HTML Police がコードを調べて意味のないタグをすべて見つけ出すので、注意を払う必要がありま...