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

推薦する

突然外部ネットワークからDockerにアクセスできなくなる問題の解決方法

マスターのメソッドによると、原因は sysctl net.ipv4.ip_forward であること...

JavaScriptイベント実行メカニズムの深い理解

目次序文ブラウザJS非同期実行の原理ブラウザのイベントループ実行スタックとタスクキューマクロタスクと...

システム エラー 1067 のため、MySQL 5.6 解凍バージョン サービスを開始できません

今日午後ずっと私を悩ませたバグを記録する半月前から始めましょう。それから.................

mysql8.0.11クライアントがログインできない問題の解決方法

この記事では、mysql8.0.11クライアントがログインできない問題の解決策を紹介します。参考まで...

Ubuntu 16.04.4LTS に mininet をインストールする際に発生する問題と解決策

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

jsオブジェクト指向カプセル化カスケードドロップダウンメニューリストの実装手順

この例で開発されたカスケード ドロップダウン メニューは、既存の JSON データに基づいて作成され...

nginxのインストールと設定の詳細なプロセス記録

目次1 nginxの紹介1 nginxとは何か2 つのアプリケーション シナリオ2 nginxのイン...

XHTML 入門チュートリアル: よく使われる XHTML タグ

<br />記事と同様に、Web ページにも明確な段落と重要度の異なるタイトルが必要です...

Vue で手ぶれ補正とスロットリングを使用する方法

目次序文コンセプト安定意味使用シナリオコードVueでの使用スロットリング意味使用シナリオコードVue...

HTML ページ ヘッダー コード例の詳細な説明

知識ポイント1: ヘッダー情報にWebページのベースURLを設定するベース URL の本質は、ハイパ...

非常に実用的なMySQL関数の包括的な概要、詳細な例の分析チュートリアル

目次1. MySQLの関数の説明2. 単行関数の分類3. キャラクター機能4. 数学関数5. 日付と...

MYSQL における char と varchar の違い

CHAR 型と VARCHAR 型は似ていますが、主に格納場所、末尾のスペース、取得方法が異なります...

回転するフリップカードアニメーションの効果を実現するCSS

回転フリップ効果の CSS アニメーション、具体的な内容は次のとおりです。 1. まず2つのボックス...

MySQLコンテナ間のレプリケーション構成例の詳細な説明

背景先週、会社で MySQL レプリケーションのトレーニングを受けたので、今週末は学んだことを実践す...

Ubuntu 20.04でAliソースを変更する方法

なお、この記事では、単に 20.04 ソースに変更する方法を説明するのではなく、20.04 に基づい...