vue3コンポーネントの通信モードは次のとおりです。
小道具<子: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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: HTML の iframe と frame の違いを例を使って説明します
目的: MySQL 集計関数のネストされた使用集計関数は直接ネストできません。例: max(coun...
目次方法 1: ルーティング メタ情報 (meta)方法 2: ルーティング テーブルを動的に生成す...
数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...
URL: http://hostname.com/contextPath/servletPath/p...
Alibaba Cloud Diskの最後のアップデートからかなり時間が経ちました。ネットユーザー...
効果プレビューアイデア現在のリストを最後の項目までスクロールし、すぐに最初の項目に戻ります。問題1....
概要: Oracle scottユーザーには4つのテーブルがあり、実験やデータ検証に便利です。現在は...
Nginx グローバル変数Nginx には、$variable 名を通じて使用できるグローバル変数が...
目次方法1: 関数を直接呼び出す方法2: provide / inject (静的更新) を使用する...
最近はMySQLのメモをたくさん取っていますが、それは主に会社のOracleが比較的安定していてメン...
以下の情報はインターネットから収集したものです1. アンカーは、Web ページ作成におけるハイパーリ...
echartsワードクラウドはechartsの拡張版ですhttps://echarts.apache...
1. イメージをプルするまず、次のコマンドを実行して、イメージをローカル コンピューターにダウンロー...
sort コマンドは非常によく使用されますが、-o、-n、-u、-r などの多くのパラメーターがあり...
これは実際には IE の公式ドキュメントではありません。他の人が実践を通じて開発した IE6 のデフ...