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

推薦する

Linux システムのシャットダウンコマンドの違いと使い方の詳細な説明

Linux システムのシャットダウン コマンドは何ですか? Liangxu Tutorial Net...

Vueはドラッグプログレスバーを実装します

この記事では、ドラッグプログレスバーを実現するためのVueの具体的なコードを例として紹介します。具体...

JavaScript を学ぶときに知っておくべき 3 つのヒント

目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

イメージのパッケージ化とワンクリック展開を実現するためにDockerを組み合わせたアイデア

1. サーバーにDockerをインストールする yumでdockerをインストール設定ファイルを変更...

MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例

MySQLはトリガーを使用してデータベース内のテーブルの行制限を解決します。詳細な説明と例最近のプロ...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

Linuxシステムはポート3306、8080などを外部に開放します。ファイアウォール設定の詳しい説明

多くの場合、Linux システムに Web サービス アプリケーション (Tomcat、Apache...

あるテーブルのデータの列を別のテーブルの列にコピーするMySQLメソッド

mysql 1 つのテーブル列を別のテーブルにコピーする場合によっては、フィールドから別の新しいフィ...

MACでMYSQLデータベースのパスワードを忘れた場合の解決策

Mac オペレーティングシステムで MYSQL データベースのパスワードを忘れた場合の簡単な解決策1...

CentOS7でXShellとネットワーク設定を接続する方法

1. Linuxネットワーク構成ネットワークを構成する前に、まずローカル IPv4 アドレスやデフォ...

CSS3を使用して背景画像の色を変更するさまざまな方法

CSS3 では画像の色を変更できます。これからは複数の絵をデザインする必要がなくなり、いつでも修正で...

ウェブ上の模倣と盗作に関する議論

2005年に業界に入ってから数か月後、労働者の日休みの期間中、1か月以上毎日12時まで残業をしました...

MySQL 5.7.18 zip バージョンのインストール チュートリアル

MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...