vue3 コンポーネント通信方法の概要と例

vue3 コンポーネント通信方法の概要と例

vue3コンポーネントの通信モードは次のとおりです。

  • 小道具
  • $放出
  • $expose / 参照
  • $属性
  • vモデル
  • 提供する/注入する
  • ヴュークス
  • ミット

小道具

<子:msg2="msg2" />
<スクリプトの設定>
    const props = defineProps({
        //書き込み方法1 msg2:String
        // 書き込み方法 2 msg2:{
            タイプ:文字列、
            デフォルト:''
        }
    })
    console.log(props) // {msg2:'これはサブコンポーネント2の情報です'}
</スクリプト>

$放出

// 子.vue
<テンプレート>
    // 記述方法 1 <div @click="emit('myclick')">button</div>
    // 記述方法 2 <div @click="handleClick">button</div>
</テンプレート>
<スクリプトの設定>
    // メソッド 1 const emitting = defineEmits(['myClick'],['myClick2'])
    // メソッド 2 const handleClick = () => {
        emitting('myClick','これは親コンポーネントに送信される情報です');
     }
      
     // 方法 2 は vue3.2 には適用できません。使用されている useContext() は廃止されています。import { useContext } from 'vue'
     const { 出力 } = useContext()
     const ハンドルクリック = () => { 
      emitting('myClick','これは親コンポーネントに送信される情報です'   
     }
</スクリプト>
 
// Parent.vue は <template> に応答します
    <child @myClick="onMyClick"></child>
</テンプレート>
<スクリプトの設定>
    「./child.vue」から子をインポートします。
    onMychilk をインポートします (msg) => {
        console.log(msg) // 親コンポーネントが受信した情報}
</スクリプト>

公開/参照

親コンポーネントは子コンポーネントのプロパティを取得するか、子コンポーネントメソッドを呼び出します。

<スクリプトの設定>
    // 方法 1: useContext() は vue3.2 以降廃止されました import { useContext } from 'vue'
    定数ctx = useContext()
    // 外部に公開されるプロパティとメソッドはctx.expose({
        childName: 'これは子コンポーネントのプロパティです',
        いくつかのメソッド(){
        console.log('これは子コンポーネントのメソッドです')
        }
    })
</スクリプト>
 
// Parent.vue 注記 ref="comp"
<テンプレート>
    <child ref="comp"></child>
    <button @click="handleClick">ボタン</button>
</テンプレート>
<スクリプト>
    './child.vue' から子をインポートします。
    'vue' から { ref } をインポートします 
    定数comp = ref(null)
    const ハンドルクリック = () => {
        console.log(comp.value.childName)
        comp.value.someMethod() //サブコンポーネントによって公開されたメソッドを呼び出す}
</スクリプト>

属性

attrs: クラスとスタイルを除く親スコープの非プロパティ属性のコレクションが含まれます

// 親コンポーネント <child :msg1="msg1" :msg2="msg2" title="3333"></child>
<スクリプトの設定>
    './child.vue' から子をインポートします。
    'vueから{ref,reactive}をインポートします
    定数msg1 = ref('111')
    定数msg2 = ref('222')
</スクリプト>
 
// サブコンポーネント <スクリプト設定>
    'vue' から {defineProps、useContext、useAttars} をインポートします。
    const props = defineProps({
        メッセージ1: 文字列
    })
     
    // 方法 1
    定数ctx = useContext()
    console.log(ctx.attars) // {msg2:'222',title:'333'}
     
    // 方法 2 
    定数 attrs = useAttrs()
    console.log(attars) // {msg2:'2222',title:'3333'}
</スクリプト>

vモデル

複数のデータの双方向バインディングをサポートできます

<child v-model:key="キー" v-model:value="値" />
<スクリプト>
    './child.vue' から子をインポートします。
    'vue' から { ref,reactive } をインポートします
    定数キー = ref('111')
    定数値 = ref('222')
</スクリプト>
 
//サブコンポーネント <テンプレート>
   <button @click="handleClick"></button>
</テンプレート>
<スクリプトの設定>
    // メソッド 1 v3.2 は削除されました import { useContext } from 'vue'
    const { 出力 } = useContext()
     
    // メソッド 2import { defineEmits } from 'vue'
    const 出力 = defineEmits(['キー','値'])
     
    // 使用法 const handleClick = () => {
        出力('update:key','新しいキー')
        出力('update:value','新しい値')
    }
</スクリプト>

提供する/注入する

provide/inject は依存性注入です。provide: 子孫コンポーネントに提供したいデータを指定できます。inject: コンポーネントがどれだけ深くネストされているかに関係なく、どの子孫コンポーネントでもこのコンポーネントに追加したいデータを受け入れます。

// 親コンポーネント <スクリプト設定>
    'vue' から { provide } をインポートします
    const name = provide('name')
    console.log('name','ムフア')
</スクリプト>
//サブコンポーネント <スクリプト設定>
    'vue' から { inject } をインポートします
    定数名 = 注入('名前')
    console.log(name) //Muhua</script>

ヴュークス

//ストア/index.js
'vuex' から {createStore} をインポートします。
エクスポートデフォルトcreateStore({
    状態:{count:1},
    ゲッター:{
        getCount:state=>state.count
    },
    突然変異:
        追加(状態){
            状態.count++
        }
    }
   })
 // メイン.js
 'vue' から {createApp} をインポートします。
 './App.vue' から APP をインポートします。
 './store' からストアをインポートします
 createApp(APP).use(store).mount("#app")
  
 // <template> を直接使用する
     <div>
         {{ $store.state.count }}
     </div>
     <button @click="$store.commit('add')">
     </ボタン>
 </テンプレート>
  
 // <スクリプト設定> を取得します
     'vuex' から { useStore,computed } をインポートします。
     定数ストア = useStore()
     コンソールログ(ストアの状態カウント)
      
     const count = 計算された (()=>store.state.count)
     コンソール.log(カウント)
 </スクリプト>

ミット

EventBusのクロスコンポーネント通信はVue3では利用できなくなりました。代替手段はmitt.jsですが、EventBusの原理と方法は同じです。インストール方法はnpm i mitt -Sです。

カプセル化

ミット
'mitt' から mitt をインポートする
定数ミット = ミット()
デフォルトのミットをエクスポートする

コンポーネント間の使用

// コンポーネントA 
<スクリプトの設定>
    './mitt' から mitt をインポートします
    const ハンドルクリック = () => {
        mitt.emit('handleChange')
    }
</スクリプト>
// コンポーネント B 
<スクリプトの設定>
'./mitt' から mitt をインポートします
'vue' から { onUnmounted } をインポートします
const someMethod = () => {...}
mitt.on('handleChange',someMethod)
マウント解除時(()=>{
    mitt.off('handleChange',someMethod)
})
</スクリプト>

以上で、Vue3 コンポーネント通信方式の概要と使用例についての説明は終了です。Vue3 コンポーネント通信のさまざまな方式の詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue3における非親子コンポーネント通信の詳細な説明
  • Vue3における7種類のコンポーネント通信の詳細
  • Vue3.xはコンポーネント通信にmitt.jsを使用します
  • Vue3 がコンポーネント通信に mitt を使用する手順

<<:  Linux での NTP サーバー設定の詳細な手順

>>:  HTML の iframe と frame の違いを例を使って説明します

推薦する

WeChat アプレットの日付と時刻のコンポーネント (年、月、日、時間、分)

この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...

Nginxポーリングアルゴリズムの基本的な実装方法の詳細な説明

ポーリングアルゴリズムの紹介多くの人が職場で nginx を使用しており、その設定に精通しています。...

ウェブサイトをIE6、7、8、9の古いバージョンに対応させるための3つのソリューション

Microsoft は後からブラウザの研究開発に力を入れてきましたが、実際のところ、最新の IE ブ...

JS でオブジェクトが空オブジェクトかどうかを判断する 5 つの方法

1. jsonオブジェクトをjson文字列に変換し、文字列が「{}」であるかどうかを判断します。 v...

Nginx は gzip 圧縮に基づいてアクセス速度を向上します

1. nginx はなぜ gzip を使用するのですか? 1. 圧縮の役割:ページがgzipで圧縮さ...

Vueはカードフリップ効果を実現します

この記事では、カードフリップ効果を実現するためのVueの具体的なコードを例として紹介します。具体的な...

MySQL の DDL と DML についての簡単な説明

目次序文1. DDL 1.1 データベース操作1.2 データテーブルの操作1.3 一般的なデータ型1...

MySQL 5.7 共通データ型

——「MySQL in Simple Terms (第 2 版)」からのメモ数値型整数型バイト最小最...

ノードを使用して静的ファイルキャッシュを実装する方法

目次キャッシュキャッシュ位置の分類キャッシュ設定ヘッダーNodeは静的ファイルキャッシュを実装する強...

星のきらめき効果を実現するネイティブ js

この記事の例では、星のきらめき効果を実現するためのjsの具体的なコードを共有しています。具体的な内容...

vue WatchとComputedの使用の概要

目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...

CSSスタイルで実現されるHTML背景色のグラデーション効果

エフェクトのスクリーンショット:実装コード:コードをコピーコードは次のとおりです。 <!DOC...

クリックナンバーゲームを実装するネイティブJS

参考までに、クリックナンバーゲームをネイティブJSで実装しました。具体的な内容は以下のとおりです。最...

Vue3.0+vite2は動的非同期コンポーネントの遅延読み込みを実装します

目次Viteプロジェクトを作成するコンポーネントの作成Viteプロジェクトを作成するパフォーマンスが...

MySQL CHARとVARCHARの保存と読み取りの違い

導入保存時と読み取り時に CHAR 型と VARCHAR 型の違いを本当にご存知ですか?まずいくつか...