検索
ホームページウェブフロントエンドVue.jsVue ドキュメントのコンポーネント データ転送とイベント転送の実装方法

Vue は、開発者が複雑なページを小さな独立したモジュールに分解できるコンポーネント化機能を備えた人気のフロントエンド フレームワークです。 Vueではコンポーネント間のデータ転送とイベント転送が非常に重要なテーマとなっておりますが、今回はVueにおけるコンポーネントのデータ転送とイベント転送の実装方法について詳しく紹介していきます。

1. コンポーネント データの転送

Vue では、コンポーネント データの転送は 2 つのカテゴリに分けられ、1 つは親コンポーネントから子コンポーネントへの転送、もう 1 つは子コンポーネントの転送です。コンポーネントを親コンポーネントに転送します。

1. 親コンポーネントは子コンポーネントにデータを渡します

親コンポーネントは、子コンポーネントにデータを渡すために props オプションを使用する必要があります。props は、子コンポーネントが親コンポーネントから渡されたデータを受け取る方法です。親コンポーネントの v-bind: 属性名を介して子コンポーネントにデータを渡し、子コンポーネントの props オプションを介してデータを受け取ります。

最初に親コンポーネントのコードを見てください:

<template>
  <div>
    <child-component :title="title"></child-component>
  </div>
</template>

<script>
import ChildComponent from './child.vue'

export default {
  components: { ChildComponent },
  data () {
    return {
      title: 'this is the title'
    }
  }
}
</script>

上記のコードでは、メイン コンポーネントを定義し、v-bind: コンポーネントを通じて title 属性を子コンポーネントに渡します。

次に、サブコンポーネントのコードを見てみましょう:

<template>
  <div>
    <h1 id="title">{{ title }}</h1>
  </div>
</template>

<script>
export default {
  props: {
    title: {
      type: String,
      required: true
    }
  }
}
</script>

上記のコードでは、サブコンポーネントを定義し、親コンポーネントから props オプションを通じて渡された title 属性を受け取ります。

2. サブコンポーネントが親コンポーネントにデータを渡す

サブコンポーネントから親コンポーネントにデータを渡すには、$emit メソッドを使用する必要があります。$emit は、サブコンポーネントが親にデータを渡す方法です。成分。子コンポーネントで $emit メソッドを使用して、カスタム イベントをトリガーし、渡す必要があるデータを渡します。このカスタム イベントを親コンポーネントで @event 名を使用してリッスンし、子コンポーネントによって渡されたデータをイベントレスポンス機能です。

最初にサブコンポーネントのコードを見てください:

<template>
  <div>
    <button @click="increment">{{ count }}</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      count: 0
    }
  },
  methods: {
    increment () {
      this.count++
      this.$emit('increment', this.count)
    }
  }
}
</script>

上記のコードでは、サブコンポーネントを定義し、$emit メソッドを使用して、ボタンがクリックされたときにカスタム イベント インクリメントをトリガーします。現在のカウント値をパラメータとして親コンポーネントに渡します。

次に、親コンポーネントのコードを見てください:

<template>
  <div>
    <h1 id="totalCount">{{ totalCount }}</h1>
    <child-component @increment="onChildIncrement"></child-component>
  </div>
</template>

<script>
import ChildComponent from './child.vue'

export default {
  components: { ChildComponent },
  data () {
    return {
      totalCount: 0
    }
  },
  methods: {
    onChildIncrement (count) {
      this.totalCount += count
    }
  }
}
</script>

上記のコードでは、親コンポーネントを定義し、子コンポーネントのインクリメント イベントをリッスンするときに、カウント値を渡します。応答関数 onChildIncrement のパラメーターとして使用し、応答関数の totalCount の値を更新します。

2. コンポーネントのイベント配信

Vue では、コンポーネント間のイベント配信はイベント バスと vuex を通じて実現できます。

1. イベント バス

イベント バスは、単純なイベント配信方法です。中央のイベント バスを作成します。すべてのコンポーネントは、イベントを登録したり、イベント バスにイベントをトリガーしたりできます。 Vue では、Vue.prototype.$bus プロパティを使用してイベント バスを作成できます。

最初にイベント バスの使用方法を見てみましょう:

// main.js中创建事件总线
import Vue from 'vue'

Vue.prototype.$bus = new Vue()

// 在需要传递事件的组件中注册事件和触发事件
this.$bus.$emit('my-event', data)

this.$bus.$on('my-event', (data) => { ... })

上記のコードでは、main.js ファイルの Vue.prototype.$bus プロパティを通じてイベント バスを作成しました。次に、イベントを渡す必要があるコンポーネントで、$emit メソッドを介してカスタム イベント my-event をトリガーし、パラメーターとして渡す必要があるデータをイベントの応答関数に渡します。イベントを受信し、$on メソッド イベントを通じてカスタム イベント my- をリッスンし、イベント応答関数で渡されたデータを受信する必要があります。

2.vuex

vuex は、公式に推奨される状態管理ソリューションです。すべてのコンポーネントの状態をグローバル状態ツリーに配置します。すべてのコンポーネントは、グローバル状態から状態にアクセスできます。ツリー内のステータスを更新します。 vuex では、ストア オブジェクトを使用してグローバル状態を保存し、ミューテーション、アクション、ゲッターを通じてグローバル状態を変更できます。

まず、vuex の使用方法を見てみましょう:

// store.js文件
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    asyncIncrement (context) {
      setTimeout(() => {
        context.commit('increment')
      }, 1000)
    }
  },
  getters: {
    doubleCount (state) {
      return state.count * 2
    }
  }
})

// 在组件中使用vuex
import { mapState, mapMutations, mapActions, mapGetters } from 'vuex'

export default {
  computed: {
    ...mapState({
      count: state => state.count
    }),
    ...mapGetters([
      'doubleCount'
    ])
  },
  methods: {
    ...mapMutations([
      'increment'
    ]),
    ...mapActions([
      'asyncIncrement'
    ])
  }
}

上記のコードでは、store.js ファイルにグローバル状態を保存するストア オブジェクトを定義し、ミューテーション、アクション、およびgetters を使用してグローバル状態を変更および取得します。コンポーネントでは、mapState、mapMutations、mapActions、mapGetters などの補助関数を通じてストア内の状態、変更関数、およびアクション関数をマップし、コンポーネント内で使用します。

結論

Vue では、コンポーネント間のデータ転送とイベント転送は非常に重要なトピックです。さまざまなシナリオやニーズに合わせて、props、$emit、イベント バス、vuex などのメソッドを使用して、データ転送とイベント転送を実現します。これらのスキルを習得すると、Vue アプリケーションをより柔軟に編成および管理できるようになります。

以上がVue ドキュメントのコンポーネント データ転送とイベント転送の実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
vue.jsとフロントエンドスタック:接続の理解vue.jsとフロントエンドスタック:接続の理解Apr 24, 2025 am 12:19 AM

VUE.JSは、開発効率とユーザーエクスペリエンスを向上させるために、フロントエンドテクノロジースタックと密接に統合されています。 1)建設ツール:Webpackおよびロールアップと統合して、モジュール開発を実現します。 2)国家管理:VUEXと統合して、複雑なアプリケーションステータスを管理します。 3)ルーティング:Vuerouterと統合して、単一ページのアプリケーションルーティングを実現します。 4)CSSプリプロセッサ:SASSをサポートし、スタイル開発効率を改善するために少なくなります。

Netflix:React(またはその他のフレームワーク)の使用の調査Netflix:React(またはその他のフレームワーク)の使用の調査Apr 23, 2025 am 12:02 AM

Netflixは、Reactのコンポーネント設計と仮想DOMメカニズムが複雑なインターフェイスと頻繁な更新を効率的に処理できるため、ユーザーインターフェイスを構築するためにReactを選択しました。 1)コンポーネントベースの設計により、Netflixはインターフェイスを管理可能なウィジェットに分解し、開発効率とコード保守性を向上させることができます。 2)仮想DOMメカニズムは、DOM操作を最小化することにより、Netflixユーザーインターフェイスの滑らかさと高性能を保証します。

vue.jsとフロントエンド:フレームワークに深く飛び込むvue.jsとフロントエンド:フレームワークに深く飛び込むApr 22, 2025 am 12:04 AM

Vue.jsは、使いやすく強力なため、開発者に愛されています。 1)そのレスポンシブデータバインディングシステムは、ビューを自動的に更新します。 2)コンポーネントシステムは、コードの再利用性と保守性を向上させます。 3)コンピューティングプロパティとリスナーは、コードの読みやすさとパフォーマンスを向上させます。 4)Vuedevtoolsの使用とコンソールエラーのチェックは、一般的なデバッグ手法です。 5)パフォーマンスの最適化には、主要な属性、計算された属性、およびキープアライブコンポーネントの使用が含まれます。 6)ベストプラクティスには、クリアコンポーネントの命名、単一ファイルコンポーネントの使用、ライフサイクルフックの合理的な使用が含まれます。

フロントエンドのvue.jsの力:主要な機能と利点フロントエンドのvue.jsの力:主要な機能と利点Apr 21, 2025 am 12:07 AM

Vue.jsは、効率的で保守可能なフロントエンドアプリケーションを構築するのに適した進歩的なJavaScriptフレームワークです。その主な機能には、1。レスポンシブデータバインディング、2。コンポーネント開発、3。仮想DOM。これらの機能を通じて、VUE.JSは開発プロセスを簡素化し、アプリケーションのパフォーマンスと保守性を向上させ、最新のWeb開発で非常に人気を博しています。

Vue.jsはReactよりも優れていますか?Vue.jsはReactよりも優れていますか?Apr 20, 2025 am 12:05 AM

Vue.jsとReactにはそれぞれ独自の利点と欠点があり、選択はプロジェクトの要件とチームの条件に依存します。 1)Vue.jsは、シンプルで使いやすいため、小さなプロジェクトや初心者に適しています。 2)Reactは、その豊富な生態系とコンポーネント設計のため、大規模なプロジェクトと複雑なUIに適しています。

Vue.jsの関数:フロントエンドでのユーザーエクスペリエンスの強化Vue.jsの関数:フロントエンドでのユーザーエクスペリエンスの強化Apr 19, 2025 am 12:13 AM

Vue.jsは複数の機能を介してユーザーエクスペリエンスを改善します。1。レスポンシブシステムは、リアルタイムデータフィードバックを実現します。 2。コンポーネント開発により、コードの再利用性が向上します。 3. Vuerouterはスムーズなナビゲーションを提供します。 4.動的データの結合および遷移アニメーションは、相互作用効果を強化します。 5.エラー処理メカニズムにより、ユーザーのフィードバックが保証されます。 6.パフォーマンスの最適化とベストプラクティスは、アプリケーションのパフォーマンスを改善します。

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は独立した再利用可能なコンポーネントに分割できます。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)