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に絵文字表現を挿入する方法

推薦する

CSS3 で transform を使用した場合のフォントぼかしの解決方法の詳細な説明

この質問は非常に奇妙なので、あまり多くを語らずにコードに直接進みます。 .g-ダイアログラッパー{ ...

Linux環境でのshadowsocks+polipoグローバルプロキシの設定

1. シャドウソックスをインストールするsudo apt-get install python-pi...

Vueはアンカー配置機能を実装します

この記事では、アンカー配置を実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

MySQL インデックス プッシュダウンを 5 分で理解する

目次インデックス プッシュダウンとは何ですか?インデックスプッシュダウン最適化の原理インデックスプッ...

Linux の高並列性とパフォーマンス最適化の落とし穴の紹介

目次序文Linux アプリケーション実行中に開いているファイルが多すぎる問題の分析と解決Linux ...

Linux ダイナミックライブラリの生成と使用ガイドの詳細な説明

Linux での動的ライブラリ ファイルのファイル名は libxxx.so のようになります。ここで...

フィルターを使用して画像に透明な CSS を書く方法

フィルターを使用して画像に透明な CSS を書く方法コードをコピーコードは次のとおりです。 html...

MySQL LOAD_FILE() 関数メソッドの概要

MySQL では、LOAD_FILE() 関数はファイルを読み取り、その内容を文字列として返します。...

独自の YUM リポジトリを作成する手順

簡単に言うと、ウェアハウスとして使用される仮想マシンの IP は 192.168.149.129 で...

Linuxターミナルでファイルを作成する2つの一般的な方法を簡単に理解する

mkdir コマンドを使用して新しいディレクトリを作成できることは誰もが知っていますが、多くの場合、...

CSS 8 目を引く HOVER 効果のサンプル コード

1. エフェクトHTMLを送信する <div id="送信ボタン">...

MySQL の最適化: サブクエリの代わりに結合を使用する

サブクエリの代わりにJOINを使用するMySQL はバージョン 4.1 以降で SQL サブクエリを...

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

docker によってプルされたイメージがどこに保存されるかの詳細な説明

docker によってプルされたコマンドは、デフォルトでは /var/lib/docker/ フォル...

JavaScript を使用して二分探索木を実装する方法

コンピュータ サイエンスで最も一般的に使用され、議論されているデータ構造の 1 つは、二分探索木です...