検索
ホームページウェブフロントエンドVue.jsVue コンポーネント間で通信する 6 つの方法

Vue コンポーネント間で通信する 6 つの方法

Jun 11, 2023 pm 08:42 PM
vueコンポーネント通信propsパラメータの受け渡しイベントバス。

Vue は、シングルページ アプリケーションを構築するための人気のある JavaScript フレームワークです。 Vue では、コンポーネントはアプリケーションを構築するための基本単位であり、データの表示と処理に使用される再利用可能なコード ブロックです。コンポーネント通信は、コンポーネント間のデータ転送と対話のための中心的なメカニズムの 1 つです。この記事では、コンポーネントが通信する 6 つの方法について説明します。

1. プロップとイベント

プロップとイベントは、Vue の最も基本的なコンポーネント通信メソッドです。親コンポーネントは、props を通じて子コンポーネントにデータを渡します。子コンポーネントは、イベント コンストラクターを通じて親コンポーネントにデータを送信します。この通信方式は片方向伝送が特徴です。

親コンポーネントは、props を通じて子コンポーネントにデータを渡します:

<template>
  <child-component :message="parentMessage"></child-component>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    data() {
      return {
        parentMessage: 'this is parent'
      }
    },
    components: {
      ChildComponent
    }
  }
</script>

子コンポーネントでは、props を宣言し、props を使用して親コンポーネントからデータを受け取る必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    props: ['message']
  }
</script>

次に、子コンポーネントはイベントを通じて親コンポーネントにデータを送信します。

<template>
  <button @click="updateParentMessage">Update Parent Message</button>
</template>
<script>
  export default {
    methods: {
      updateParentMessage() {
        this.$emit('update-message', 'this is child');
      }
    }
  }
</script>

親コンポーネントでは、子コンポーネントのイベントをリッスンし、イベント リスニングで子コンポーネントからデータを受信する必要があります。 function:

<template>
  <child-component :message="parentMessage" @update-message="updateMessage"></child-component>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    data() {
      return {
        parentMessage: 'this is parent'
      }
    },
    components: {
      ChildComponent
    },
    methods: {
      updateMessage(message) {
        this.parentMessage = message;
      }
    }
  }
</script>

2. Vuex

Vuex は、Vue の状態管理用の公式プラグインです。 Vuex はグローバルな状態管理モデルを実装しています。ストアを通じてアプリケーションのすべてのコンポーネントの状態を一元管理します。複数のコンポーネントが状態を共有する場合、Vuex を使用すると、コンポーネント間のデータ交換と通信の管理が容易になります。

まず、Vuex ストアを作成する必要があります:

import Vuex from 'vuex'
import Vue from 'vue'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    message: 'hello world'
  },
  mutations: {
    updateMessage(state, message) {
      state.message = message
    }
  },
  actions: {
    updateMessage({ commit }, message) {
      commit('updateMessage', message)
    }
  },
  getters: {
    getMessage: state => state.message
  }
})

export default store

コンポーネントでは、$store を使用してストア内の状態にアクセスし、commit メソッドを使用して変更するミューテーションを送信できます。状態:

<template>
  <div>{{ this.$store.getters.getMessage }}</div>
  <button @click="updateMessage">Update Message</button>
</template>
<script>
  export default {
    methods: {
      updateMessage() {
        this.$store.dispatch('updateMessage', 'hello vuex')
      }
    }
  }
</script>

3. $parent と $children

Vue のすべてのコンポーネントには、$parent プロパティと $children プロパティがあります。 $parent プロパティはコンポーネントの親コンポーネントを指し、$children プロパティはコンポーネントの子コンポーネントを指します。 $parent プロパティと $children プロパティを通じて、コンポーネントは親コンポーネントと子コンポーネントのデータとメソッドに直接アクセスできます。

たとえば、親コンポーネントは、$children 属性を通じて子コンポーネントのデータとメソッドにアクセスできます。

<template>
  <div>
    {{ $children[0].message }}
    <button @click="$children[0].updateMessage">Update message</button>
  </div>
</template>

子コンポーネントでは、message メソッドと updateMessage メソッドを定義する必要があります。

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    data() {
      return {
        message: 'hello child'
      }
    },
    methods: {
      updateMessage() {
        this.message = 'hello parent'
      }
    }
  }
</script>

four , $refs

Vue のすべてのコンポーネントには $refs 属性があります。 $refs 属性は、コンポーネント内の ref 属性を使用して名前が付けられたサブコンポーネントまたは DOM 要素への参照を含むオブジェクトです。 $refs 属性を通じて、コンポーネントは相互に参照したり呼び出したりできます。

たとえば、親コンポーネントの ref 属性を通じてサブコンポーネントの参照を取得できます:

<template>
  <div>
    <child-component ref="childComponent"></child-component>
    <button @click="updateMessage">Update message</button>
  </div>
</template>
<script>
  import ChildComponent from './ChildComponent.vue'
  export default {
    components: {
      ChildComponent
    },
    methods: {
      updateMessage() {
        this.$refs.childComponent.updateMessage()
      }
    }
  }
</script>

サブコンポーネントでは、updateMessage メソッドを定義する必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    data() {
      return {
        message: 'hello child'
      }
    },
    methods: {
      updateMessage() {
        this.message = 'hello parent'
      }
    }
  }
</script>

5. イベント バス

イベント バスは、Vue コンポーネント間でイベントを効率的に配信できる、広く使用されている中央イベント システムです。イベント バスは、$emit メソッドを通じて他の Vue コンポーネントにイベントを送信したり、$on メソッドを通じて他の Vue コンポーネントから送信されたイベントを受信したりできる単純な Vue インスタンスです。

イベント バスを実装するときは、新しい Vue インスタンスを作成する必要があります:

import Vue from 'vue'

const bus = new Vue()

export default bus

次に、コンポーネントにイベント バスを導入し、$emit を使用してイベントを送信し、$on を使用してイベントを受信します。 . :

// 发送事件
import Bus from './Bus.js'

Bus.$emit('event-name', data)

// 接收事件
import Bus from './Bus.js'

Bus.$on('event-name', (data) => {
  console.log(data)
})

6. Provide と Inject

Vue 2.2 の新しい Provide と Inject は、高度なコンポーネント通信方法です。 Provide と Inject を使用すると、親コンポーネントは、子に指示するだけでなく、すべての子孫コンポーネントにデータを渡すことができます。 Provide と Inject は、props、event、$parent/$children とは異なるコンポーネント通信の形式であり、より柔軟でカプセル化された通信方法です。

親コンポーネントは、provide を通じてデータを提供します:

<template>
  <child-component></child-component>
</template>
<script>
  export default {
    provide: {
      message: 'hello provide'
    }
  }
</script>

子コンポーネントでは、親コンポーネントから渡されたデータを受け取るために inject を定義する必要があります:

<template>
  <div>{{ message }}</div>
</template>
<script>
  export default {
    inject: ['message']
  }
</script>

これらは次のとおりです。 6種類のVueコンポーネント通信方法の紹介。アプリケーションのシナリオが異なれば、コンポーネントの通信方法も異なります。これらの通信方法をマスターすると、Vue コンポーネントの開発をより効率的、シンプル、かつ柔軟にすることができます。

以上がVue コンポーネント間で通信する 6 つの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Vue.js:Web開発におけるその役割を定義しますVue.js:Web開発におけるその役割を定義しますApr 18, 2025 am 12:07 AM

Web開発におけるVue.jsの役割は、開発プロセスを簡素化し、効率を向上させるプログレッシブJavaScriptフレームワークとして機能することです。 1)開発者は、レスポンシブデータのバインディングとコンポーネント開発を通じてビジネスロジックに集中できるようになります。 2)VUE.JSの作業原則は、パフォーマンスを最適化するためにレスポンシブシステムと仮想DOMに依存しています。 3)実際のプロジェクトでは、VUEXを使用してグローバルな状態を管理し、データの応答性を最適化することが一般的な慣行です。

Vue.jsの理解:主にフロントエンドフレームワークVue.jsの理解:主にフロントエンドフレームワークApr 17, 2025 am 12:20 AM

Vue.jsは、2014年にYou YuxiがリリースしたプログレッシブJavaScriptフレームワークで、ユーザーインターフェイスを構築します。その中心的な利点には、次のものが含まれます。1。レスポンシブデータバインディング、データ変更の自動更新ビュー。 2。コンポーネントの開発では、UIは独立した再利用可能なコンポーネントに分割できます。

Netflixのフロントエンド:React(またはVue)の例とアプリケーションNetflixのフロントエンド:React(またはVue)の例とアプリケーションApr 16, 2025 am 12:08 AM

Netflixは、Reactをフロントエンドフレームワークとして使用します。 1)Reactのコンポーネント開発モデルと強力なエコシステムが、Netflixがそれを選択した主な理由です。 2)コンポーネント化により、Netflixは複雑なインターフェイスをビデオプレーヤー、推奨リスト、ユーザーコメントなどの管理可能なチャンクに分割します。 3)Reactの仮想DOMおよびコンポーネントライフサイクルは、レンダリング効率とユーザーインタラクション管理を最適化します。

フロントエンドの風景:Netflixが選択にアプローチした方法フロントエンドの風景:Netflixが選択にアプローチした方法Apr 15, 2025 am 12:13 AM

Netflixのフロントエンドテクノロジーでの選択は、主にパフォーマンスの最適化、スケーラビリティ、ユーザーエクスペリエンスの3つの側面に焦点を当てています。 1。パフォーマンスの最適化:Netflixは、Reactをメインフレームワークとして選択し、SpeedCurveやBoomerangなどのツールを開発して、ユーザーエクスペリエンスを監視および最適化しました。 2。スケーラビリティ:マイクロフロントエンドアーキテクチャを採用し、アプリケーションを独立したモジュールに分割し、開発効率とシステムのスケーラビリティを改善します。 3.ユーザーエクスペリエンス:Netflixは、Material-UIコンポーネントライブラリを使用して、A/Bテストとユーザーフィードバックを介してインターフェイスを継続的に最適化して、一貫性と美学を確保します。

React vs. Vue:Netflixはどのフレームワークを使用していますか?React vs. Vue:Netflixはどのフレームワークを使用していますか?Apr 14, 2025 am 12:19 AM

netflixusesaCustomframeworkは、「ギボン」ビルトンリアクト、notreactorvuedirectly.1)チームエクスペリエンス:seice basedonfamperivity.2)projectomplerprojects:vueforsplerprojects、racefforcomplexones.3)customeforsneeds:reactofforsmorefloficailie.

フレームワークの選択:Netflixの決定を推進するものは何ですか?フレームワークの選択:Netflixの決定を推進するものは何ですか?Apr 13, 2025 am 12:05 AM

Netflixは、主に、パフォーマンス、スケーラビリティ、開発効率、エコシステム、技術的な負債、およびフレームワーク選択におけるメンテナンスコストを考慮しています。 1。パフォーマンスとスケーラビリティ:JavaとSpringbootが選択され、大規模なデータと高い同時リクエストを効率的に処理します。 2。開発効率とエコシステム:Reactを使用して、フロントエンド開発効率を向上させ、その豊富なエコシステムを利用します。 3.技術的な負債とメンテナンスコスト:node.jsを選択してマイクロサービスを構築して、メンテナンスコストと技術的債務を削減します。

Netflixのフロントエンドの反応、Vue、および未来Netflixのフロントエンドの反応、Vue、および未来Apr 12, 2025 am 12:12 AM

Netflixは、主にReactをフロントエンドフレームワークとして使用し、特定の機能のためにVUEによって補足されます。 1)Reactのコンポーネント化と仮想DOMは、Netflixアプリケーションのパフォーマンスと開発効率を向上させます。 2)VueはNetflixの内部ツールと小規模プロジェクトで使用されており、その柔軟性と使いやすさが重要です。

フロントエンドのvue.js:実際のアプリケーションと例フロントエンドのvue.js:実際のアプリケーションと例Apr 11, 2025 am 12:12 AM

Vue.jsは、複雑なユーザーインターフェイスを構築するのに適した進歩的なJavaScriptフレームワークです。 1)そのコア概念には、レスポンシブデータ、コンポーネント、仮想DOMが含まれます。 2)実際のアプリケーションでは、TODOアプリケーションを構築し、Vuerouterを統合することで実証できます。 3)デバッグするときは、vuedevtools and Console.logを使用することをお勧めします。 4)パフォーマンスの最適化は、V-IF/V-Show、リストレンダリング最適化、コンポーネントの非同期負荷などを通じて達成できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。