Reactコンポーネント通信の詳細な説明

Reactコンポーネント通信の詳細な説明

コンポーネント通信の概要

コンテンツ

  • コンポーネントは独立した閉じた単位であり、デフォルトでは独自のデータのみを使用できます。
  • コンポーネント化プロセスでは、完全な機能を複数のコンポーネントに分割して、アプリケーション全体の機能をより完成させます。
  • このプロセスでは、複数のコンポーネントが何らかのデータを共有することが避けられません。
  • これらの機能を実現するためには、コンポーネントの独立性や閉鎖性を打破し、外部との通信を可能にする必要があります。このプロセスはコンポーネント通信です。

3つの方法

  • 親コンポーネントと子コンポーネント間
  • 兄弟コンポーネント間
  • コンポーネントレベル全体

まとめ

コンポーネント内の状態はプライベートです。つまり、コンポーネントの状態はコンポーネント内でのみ使用でき、コンポーネントの外部で直接使用することはできません。

コンポーネントコミュニケーション - 父から息子へ

コンテンツ:

  • 親コンポーネントは渡される状態データを提供する
  • サブコンポーネントタグに属性を追加し、その値は状態のデータになります。
  • 子コンポーネントは、propsを通じて親コンポーネントから渡されたデータを受け取ります。

コアコード

親コンポーネントはデータを提供し、それを子コンポーネントに渡します。

クラス Parent は React.Component を拡張します {
    状態 = { lastName: '王' }
    与える() {
        戻る (
            <div>
                子コンポーネントにデータを渡します: <Child name={this.state.lastName} />
            </div>
        )
    }
}

サブコンポーネントがデータを受信

関数Child(props) {
	return <div>子コンポーネントはデータを受け取ります: {props.name}</div>
}

コンポーネント通信 - 子から親へ

アイデア

コールバック関数を使用すると、親コンポーネントがコールバックを提供し、子コンポーネントがそれを呼び出し、渡されるデータがコールバック関数のパラメーターとして使用されます。

ステップ

1. 親コンポーネント

1. コールバック関数 f を定義します(データを受信するために使用されます)

2. 関数fを属性の値として子コンポーネントに渡す

2. サブコンポーネント

1. 小道具を使ってfを取得する

2. fを呼び出して子コンポーネントのデータを渡す

コアコード

親コンポーネントは関数を提供し、それを子コンポーネントに渡します

クラス Parent は React.Component を拡張します {
    州: {
      数: 100
    }
    f = (数値) => {
        console.log('サブコンポーネントデータを受信しました', num)
    }
    与える() {
        戻る (
            <div>
            	子コンポーネント: <Child f={this.f} />
            </div>
        )
    }
}

子コンポーネントは関数を受け取り、

クラスChildはReact.Componentを拡張します。
    ハンドルクリック = () => {
      // 親コンポーネントから渡されたプロパティを呼び出し、パラメータ this.props.f(100) を渡します。
    }
    戻る (
    	<button onClick={this.handleClick}>クリックすると親コンポーネントにデータが渡されます</button>
    )
}

まとめ

子から親へ: 親コンポーネントで定義されたメソッドを子コンポーネントで呼び出し、必要に応じてパラメータを渡します。

コンポーネント通信 - ブラザーコンポーネント

React には兄弟コンポーネントというものはなく、状態の昇格のみがあります。

アイデア

  • 共有状態を、状態を管理する最も近い共通の親コンポーネントに昇格する
  • 考察:州の改善
  • 共通の親コンポーネントの責任:
    • 共有状態の提供
    • 共有状態を操作するためのメソッドを提供する
  • 通信したい子コンポーネントは、propsを通じて状態または状態を操作するメソッドを受け取るだけでよい。

コアコード

parent.js

React をインポートします。{ コンポーネント } を 'react' からインポートします。
'react-dom' から ReactDOM をインポートします。
'./Jack' から Jack をインポートします
'./Rose' から Rose をインポートします
クラスAppはComponentを拡張します{
  // 1. 状態が親コンポーネントに昇格される state = {
    メッセージ: ''、
  }
  与える() {
    戻る (
      <div>
        <h1>私はアプリコンポーネントです</h1>
        <ジャックは言う={this.changeMsg}></ジャック>
        2. 子コンポーネントにステータスを表示する*/
        <ローズ メッセージ = {this.state.msg}></ローズ>
      </div>
    )
  }
  changeMsg = (メッセージ) => {
    this.setState({
      メッセージ、
    })
  }
}
// レンダリングコンポーネント ReactDOM.render(<App />, document.getElementById('root'))

Son1.js

React をインポートします。{ コンポーネント } を 'react' からインポートします。
デフォルトのクラスJackをエクスポートし、Componentを拡張します。
  与える() {
    戻る (
      <div>
        <h3>私はジャックコンポーネントです</h3>
        <button onClick={this.say}>発言</button>
      </div>
    )
  }
  言う = () => {
    this.props.say('あなたがジャンプすると私が見る')
  }
}

Son2.js

React をインポートします。{ コンポーネント } を 'react' からインポートします。
デフォルトクラスRoseをエクスポートし、Componentを拡張します。
  与える() {
    戻る (
      <div>
        <h3>私はローズコンポーネントです - {this.props.msg}</h3>
      </div>
    )
  }
}

コンポーネント通信 - レベル間コンポーネント通信

Vueでクロスレベルコンポーネント通信を使用する場合は、Contextを使用する必要があります。

コンテキストを使用する手順

3 つのステップがあります。

1. createContextメソッドをインポートして呼び出し、結果からプロバイダとコンシューマのコンポーネントを分解します。

'react' から {createContext} をインポートします。
const { プロバイダー、コンシューマー } = createContext()

2. プロバイダコンポーネントを使用してルートコンポーネントをラップし、値属性を通じて共有するデータを提供します。

戻る (
  <プロバイダー値={ここに渡すデータを入力してください}>
  	<ルートコンポーネントの内容/>
  </プロバイダー>
)

3. 子孫コンポーネントでは、ステップ2でエクスポートしたコンシューマーコンポーネントでコンポーネント全体をラップします。

戻る (
	<消費者>
  	{
      (データ) => {
      	// ここでのパラメータデータはプロバイダーから渡されたデータを自動的に受け取ります // console.log(data)
      	<コンポーネントコンテンツ> を返します。
    	}
    }
  </消費者>
)

着陸コード

context.jsファイルを作成する

'react' から {createContext} をインポートします。
const { プロバイダー、コンシューマー } = createContext()
エクスポート { コンシューマー、プロバイダー }

ルートコンポーネントの変換

'./context' から { Provider } をインポートします。
与える () {
    戻る (
      <プロバイダー値={{ num: this.state.num }}>
        <div>
          ルート コンポーネント、番号: {this.state.num}
          <親 />
          <おじさん />
        </div>
      </プロバイダー>
    )
  }

子孫コンポーネントUncle.jsを変換する

'react' から React をインポートします
'./context' から Consumer をインポートします。
デフォルトのクラスUncleをエクスポートし、React.Componentを拡張します。
  与える () {
    戻る (
      <消費者>
        {(データ) => {
          <div>I am Uncle コンポーネント、{data.num} を返します。
        }}
      </消費者>
    )
  }
}

要約する

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

以下もご興味があるかもしれません:
  • Reactコンポーネントの通信方法の詳細説明(複数)
  • 親コンポーネントと子コンポーネント間のReact通信プロパティ
  • react.js 親子コンポーネント データ バインディング リアルタイム通信 サンプル コード

<<:  ウェブデザインには目的、アイデア、思考、そして粘り強さがなければならない

>>:  フロントエンド開発者に何百万ドルもの価値をもたらす 10 のスキル

推薦する

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...

MySQL ストアド プロシージャの作成、呼び出し、管理の詳細な説明

目次ストアドプロシージャの概要ストアド プロシージャを使用する理由は何ですか?ストアドプロシージャの...

シンプルなスネークを実現するためのネイティブjsキャンバス

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

LinuxスレッドのPID(TID、LWP)を取得するいくつかの方法の詳細な説明

Linux C/C++ では、スレッド レベルの操作は通常、pthread ライブラリを通じて実行さ...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

ラジオボタンと複数選択ボタンは画像を使用してスタイル設定されます

ラジオ ボタンや複数選択ボタンにスタイルを追加する方法や、ボタンを大きくする方法を尋ねる人を以前見か...

MacにMySQLをインストールするときに初期パスワードを忘れた場合の対処方法

パスワードを忘れると困ります。Mac に MySQL をインストールするための初期パスワードを忘れて...

mysql の find_in_set 関数の基本的な使い方

序文これは私が最近見つけた新しい機能です。プロジェクトでの私の使用シナリオは次のとおりです。アプリケ...

jsを使ってシンプルなディスククロックを実現する

この記事では、参考までに、シンプルなディスククロックを実装するためのjsの具体的なコードを紹介します...

DockerにRedisをインストールし、パスワードを設定して接続する方法

Redis は分散キャッシュ サービスです。キャッシュは、大規模システムの開発やパフォーマンスの最適...

MySQL が group by をサポートしない場合の解決策の概要

MySQL 5.7.x の最新バージョンをダウンロードしてインストールしました。デフォルトでは、on...

Vue Element フロントエンドアプリケーション開発 従来の Element インターフェースコンポーネント

目次1. リストインターフェースとその他のモジュールの表示処理2. 従来のインターフェースコンポーネ...

MySQLデータベースがNULLを可能な限り避ける理由

MySQL の多くのテーブルには、NULL が列のデフォルト属性であるため、アプリケーションが NU...

Docker コンテナのカスタム ホストのネットワーク アクセス操作

docker-compose.yml に extra_hosts キーワードを追加すると、コンテナの...

Linux で MySQL 8.0 バージョンをアンインストールする方法

1. MySQLをシャットダウンする [root@localhost /]# サービスmysqldを...