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 の違いを例を使って説明します

推薦する

MySQL 集計関数のネストされた使用操作

目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...

Vueは2つのルーティング許可制御メソッドを実装しています

目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

CSS3はリストの無限スクロール/カルーセル効果を実現します

効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....

Oracle の MySQL バージョンでユーザー Scott のテーブル ステートメントを作成する例

概要: Oracle scottユーザーには4つのテーブルがあり、実験やデータ検証に便利です。現在は...

Nginx のアクセス制御とパラメータ調整方法

Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...

Vue ページをリフレッシュするために provide と injection を適用する

目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...

MySQL 数十億のデータのインポート、エクスポート、移行に関するメモ

最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...

HTML ウェブページでのアンカー(名前付きアンカー)の使用の概要

以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...

echarts ワードクラウドチャートを使用した Vue の実践記録

echartsワードクラウドはechartsの拡張版ですhttps://echarts.apache...

Docker デプロイメント RabbitMQ コンテナ実装プロセス分析

1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...

Linuxのsortコマンドの複数のパラメータを理解するための1つの質問

sort コマンドは非常によく使用されますが、-o、-n、-u、-r などの多くのパラメーターがあり...

IE6 ウェブページ作成リファレンス IE6 デフォルトスタイル

これは実際には IE の公式ドキュメントではありません。他の人が実践を通じて開発した IE6 のデフ...