Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

Vue フロントエンド開発における階層的にネストされたコンポーネント間の通信の詳細な説明

序文

Vue の親子コンポーネントは、props を通じて親コンポーネントの値を子コンポーネントに簡単に渡すことができます。コンポーネントが多くのレイヤーにネストされている場合、各レイヤーは同じ props を使用して値を渡す必要があり、これは面倒でメンテナンスが困難です。

[例] コンポーネント A はコンポーネント B を使用し、コンポーネント B はコンポーネント C を使用します。コンポーネント C は、コンポーネント A のデータ テキストとコンポーネント A のメソッド getmethod を使用する必要があります。コンポーネント A のコードは次のとおりです。

<テンプレート>
  <div>
    <P>これはコンポーネント A です</P>
    <v-コーム></v-コーム>
  </div>
</テンプレート>
<スクリプト>
  '@/view/comB.vue' から comB をインポートします。
  エクスポートデフォルト{
    名前: 'comA',
    コンポーネント:
      'v-comb': comB
    },
    データ() {
      戻る {
        メッセージ: '私はコンポーネント A のデータです'
      }
    },
    provide: function() { //子コンポーネントにプロパティとメソッドを挿入する return {
        テキスト: this.msg、
        getメソッド: 関数() {
          console.log('ルートコンポーネントでgetMethodメソッドを実行します')
        }
      }
    }
  }
</スクリプト>

キーワードprovideを使用して、子コンポーネントにデータとメソッドを公開します。
コンポーネントBはコンポーネントAの子コンポーネントであり、コンポーネントCの親コンポーネントです。コードは次のようになります。

<テンプレート>
  <div>
    <div>
      <P>これはコンポーネント B です</P>
      <v-comc></v-comc>
    </div>
  </div>
</テンプレート>
<スクリプト>
  '@/view/comC.vue' から comC をインポートします。
  エクスポートデフォルト{
    名前: 'comB',
    コンポーネント:
      'v-comc': comC
    }
  }
</スクリプト>

コンポーネント C はコンポーネント A の孫です。コンポーネント C はコンポーネント A のデータとメソッドを使用する必要があります。コードは次のとおりです。

<テンプレート>
  <div style="border:1px solid orange;color:orange;">
    <div>
      <P>これは C コンポーネントです</P>
      <div>{{テキスト}}</div>
      <button @click="getMethod">親コンポーネントメソッドを呼び出す</button>
    </div>
  </div>
</テンプレート>
<スクリプト>
  エクスポートデフォルト{
    名前: 'comC',
    inject: ['text', 'getMethod'] //text と getMethod はプロバイダーによって提供される名前です}
</スクリプト>

ここで、inject キーワードは、コンポーネント A によって公開される情報を受け取るために使用されます。inject: [] で受け取る名前は、provide によって提供される名前とまったく同じである必要があることに特に注意してください。

実行すると、インターフェースは以下のようになります。

ここに画像の説明を挿入

まとめ

複数レベルのネストされたコンポーネント通信の場合、Vue は provide および inject キーワードを使用して親コンポーネントから子コンポーネントに値を直接転送するため、非常に便利です。問題のあるサブコンポーネントと親コンポーネントの間には強い結合関係があるため、絶対に必要な場合を除き、使用することはお勧めしません。

上記は、Vue フロントエンド開発における階層的にネストされたコンポーネントの通信の詳細な説明の詳細な内容です。Vue における階層的にネストされたコンポーネントの通信の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Vueはネストされたコンポーネント内の値を取得するためにrefを使用します
  • Vueのキープアライブコンポーネントは、複数レベルのネストされたルートのキャッシュを実装します。
  • Vueの自己ネストツリーコンポーネントの使い方の詳細な説明
  • vue keep-alive は、マルチコンポーネントのネストにおいて個々のコンポーネントが存続し、破壊されないことを可能にします。
  • Vue コンポーネントにネストされたサブコンポーネントを実装する例
  • 単一の Vue ページ上の複数のコンポーネントでブラウザ ウィンドウの変更をネストして監視する問題を解決します。
  • form-create を使用して、vue カスタム コンポーネントとネストされたフォーム コンポーネントを動的に生成します。
  • Vue 親子コンポーネントのネストされたサンプルコード
  • Vue マルチレイヤーコンポーネントネストを実装する 2 つの方法 (テスト例)
  • Vue ネストされたコンポーネントパラメータの受け渡し例の共有

<<:  Docker 構成 Alibaba Cloud イメージアクセラレーション プル実装

>>:  MySQLに絵文字表現を挿入する方法

推薦する

VueのkeepAliveコンポーネントの機能と使い方の詳細な説明

序文面接中、多くの面接官は「keep-alive が何をするのか知っていますか?」と質問する際に V...

ElementUI el-select の過剰なデータに対する解決策についての簡単な説明

目次1. シナリオの説明2. 解決策オプションが多すぎる el-select コンポーネントの解決策...

MySQL InnoDB のトランザクション特性を確保するにはどうすればよいですか?

序文「データベース トランザクションの特徴は何ですか?」と尋ねられたら、 ACID 特性である原子性...

VUEは登録とログインの効果を実現します

この記事の例では、登録とログインの効果を実現するためのVUEの具体的なコードを紹介します。具体的な内...

Nginx ルーティング転送とリバースプロキシロケーション構成の実装

Nginx を設定する 3 つの方法最初の方法は、位置一致部分を直接置き換える。 2 番目の pro...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

MySQL データベース内の同じテーブルを同時にクエリして更新する方法

通常のプロジェクトでは、1 回の入札で同時にデータを更新および照会する必要があるという問題によく遭遇...

MySQL における UNION と UNION ALL の基本的な使い方

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セッ...

Mysql データベースの高度なビュー、トランザクション、インデックス、自己接続、ユーザー管理の例の分析の使用

この記事では、ビュー、トランザクション、インデックス、自己接続、ユーザー管理など、MySQL データ...

複数のドメイン名、ポート、IP仮想ホストに基づくNginx構成

1. タイプの導入1.1 ドメインベースの仮想ホスティングいわゆるドメイン名ベースの仮想ホストとは、...

Linux システムによって報告される tcp_mark_head_lost エラーの処理方法

問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...

Spring Boot 2.4 の新機能、ワンクリックビルド、Docker イメージプロセスの詳細説明

背景開発プロセス中に Docker コンテナ化をサポートするために、通常は Maven を使用してコ...

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...

MySQL インデックスのカーディナリティの概念と使用例

この記事では、例を使用して、MySQL インデックス カーディナリティの概念と使用方法を説明します。...

MySQL sql_mode の変更が有効にならない理由と解決策

目次序文シナリオシミュレーション要約する序文最近、sql_mode の話題については何度も話し合われ...