vue3中setup語法糖下父子組件間傳遞數(shù)據(jù)的方式
vue3中setup語法糖下父子組件之間如何傳遞數(shù)據(jù)
先弄明白什么是父子組件
?父子組件,分為父組件和子組件。
Vue3中,父組件指的是包含一個(gè)或多個(gè)子組件的組件,它們通過props和事件等方式來傳遞數(shù)據(jù)和通信。子組件則是被父組件所包含的組件,它們通常會(huì)接收來自父組件的數(shù)據(jù),并根據(jù)這些數(shù)據(jù)渲染自身。在Vue3中,使用<template>
標(biāo)簽來定義父組件和子組件,同時(shí)也可以使用其他標(biāo)簽如<div>, <span>
等等。
父傳子
在Vue 3的<script setup>
語法糖中,父組件向子組件傳遞數(shù)據(jù)可以通過props
實(shí)現(xiàn)。而子組件接收父組件傳遞過來的數(shù)據(jù)也是通過props進(jìn)行。
下面以一個(gè)簡單的例子來說明:
???父組件:(文件名為ParentComponent.vue)
html代碼
<template> <div> <h1>{{ message }}</h1> <ChildComponent :childMessage="message" /> </div> </template>
js代碼
<script setup> import ChildComponent from './ChildComponent.vue'; const message = 'Hello, Vue3!'; </script>
???子組件:(文件名為ChildComponent.vue)
html代碼
<template> <div> <h2>{{ childMessage }}</h2> </div> </template>
js代碼
<template> <div> <h2>{{ childMessage }}</h2> </div> </template>
在父組件中,我們定義了一個(gè)message變量,并將其作為prop傳遞給子組件。在子組件中,我們通過聲明式props接收了父組件傳遞過來的childMessage變量,并將其顯示在頁面上。
如此一來,父組件就可以向子組件傳遞數(shù)據(jù)了。如果需要更新數(shù)據(jù),則可以在父組件中直接修改message變量即可。由于子組件接收的是prop值的副本,所以不會(huì)影響到原始數(shù)據(jù)。
子傳父
在Vue 3的<script setup>
語法糖中,子組件向父組件傳遞數(shù)據(jù)可以通過emit
事件實(shí)現(xiàn)。而父組件接收子組件傳遞過來的數(shù)據(jù)也是通過監(jiān)聽emit
事件進(jìn)行。
???父組件:(文件名為ParentComponent.vue)
html代碼
<template> <div> <h1>{{ message }}</h1> <ChildComponent @update-message="handleUpdateMessage" /> </div> </template>
js代碼
<script setup> import ChildComponent from './ChildComponent.vue'; const message = 'Hello, Vue3!'; function handleUpdateMessage(newMessage) { message.value = newMessage; } </script>
???子組件:(文件名為ChildComponent.vue)
html代碼
<template> <div> <input v-model="childMessage" /> <button @click="handleClick">Update Message</button> </div> </template>
js代碼
<script setup props="['childMessage']" emits="update-message"> import { defineEmits } from 'vue'; const emit = defineEmits(['update-message']); function handleClick() { emit('update-message', childMessage.value); } </script>
同理
在子組件中,我們首先定義了emits屬性,并聲明了要發(fā)射的事件名為update-message。然后,在處理點(diǎn)擊事件的函數(shù)中,我們通過emit()方法觸發(fā)了該事件,并將輸入框中綁定的childMessage值作為參數(shù)傳遞給了父組件。在父組件中,我們使用@update-message監(jiān)聽了子組件發(fā)射的update-message事件,并調(diào)用了名為handleUpdateMessage()的方法來更新父組件的message變量。
如此一來,子組件就可以向父組件傳遞數(shù)據(jù)了。如果需要更新數(shù)據(jù),則可以在子組件中通過emit事件將新的值傳遞給父組件。由于父組件監(jiān)聽了該事件,所以會(huì)及時(shí)接收到傳遞過來的值,并進(jìn)行相應(yīng)的處理。
組件間通信都有哪些方式
在vue框架中,能實(shí)現(xiàn)組件間通信的,不只有父子組件一種??偨Y(jié)一下有以下4種:
父子組件通信:
通過 props
屬性將數(shù)據(jù)從父組件傳遞給子組件,通過 $emit
方法觸發(fā)事件并傳遞數(shù)據(jù)來實(shí)現(xiàn)子組件向父組件通信。
兄弟組件通信:
可以使用一個(gè)共同的父組件作為中介,在兄弟組件中分別通過 $parent
屬性訪問該父組件,并通過該父組件來進(jìn)行數(shù)據(jù)傳遞和事件觸發(fā)。
跨級(jí)祖先后代組件通信:
可以使用 provide
和 inject
來進(jìn)行跨級(jí)傳遞數(shù)據(jù),或者使用 event bus(事件總線)等方式來實(shí)現(xiàn)。
Vuex 狀態(tài)管理器:Vuex 是一種專門用于 Vue應(yīng)用程序狀態(tài)管理的庫。它提供了集中式存儲(chǔ)管理應(yīng)用程序的所有組件的狀態(tài),并提供了一些規(guī)則來保證狀態(tài)變更是可預(yù)測的。通過 Vuex 的 store 實(shí)例,不同的 Vue 組件可以共享同一個(gè)狀態(tài),并且對(duì)這個(gè)狀態(tài)進(jìn)行更改會(huì)被自動(dòng)監(jiān)控到。因此,在需要大量復(fù)雜交互場景下建議使用Vuex 進(jìn)行全局狀態(tài)管理。
父子組件通信和兄弟組件通信的區(qū)別
一般最常用的就是父子組件和兄弟組件的通信,兩種通信到底有何區(qū)別?也可以總結(jié)出3點(diǎn)不同之處:
1.父子組件之間的通信是單向的,即父組件向子組件傳遞數(shù)據(jù)或子組件向父組件傳遞數(shù)據(jù),而兄弟組件之間的通信是雙向的,即兄弟組件之間可以相互傳遞數(shù)據(jù)。
2.父子組件之間的通信通常使用props和自定義事件,而兄弟組件之間的通信通常使用Vue的全局事件或Vuex。
3.父子組件之間的通信通常比較簡單,適用于組件之間的簡單交互,而兄弟組件之間的通信通常比較復(fù)雜,適用于組件之間的高級(jí)交互,例如多級(jí)組件之間的聯(lián)動(dòng)。
到此這篇關(guān)于vue3中setup語法糖下父子組件之間如何傳遞數(shù)據(jù)的文章就介紹到這了,更多相關(guān)vue3父子組件傳遞數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue使用$store.commit() undefined報(bào)錯(cuò)的解決
這篇文章主要介紹了vue使用$store.commit() undefined報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06vue使用html2canvas實(shí)現(xiàn)將DOM節(jié)點(diǎn)生成對(duì)應(yīng)的PDF
這篇文章主要為大家詳細(xì)介紹了vue如何使用html2canvas實(shí)現(xiàn)將DOM節(jié)點(diǎn)生成對(duì)應(yīng)的PDF,文中的示例代碼簡潔易懂,感興趣的小伙伴可以學(xué)習(xí)一下2023-08-08vue項(xiàng)目兩種方式實(shí)現(xiàn)豎向表格的思路分析
這篇文章主要介紹了vue項(xiàng)目兩種方式實(shí)現(xiàn)豎向表格的思路分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Vue?watch中監(jiān)聽值的變化,判斷后修改值方式
這篇文章主要介紹了Vue?watch中監(jiān)聽值的變化,判斷后修改值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04Vite打包時(shí)去除console的方法實(shí)現(xiàn)
Vite打包項(xiàng)目時(shí),需要去除開發(fā)時(shí)加入的console、debugger調(diào)試信息,本文主要介紹了Vite打包時(shí)去除console的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08vue實(shí)現(xiàn)下拉多選、可搜索、全選功能(示例代碼)
本文介紹了如何在Vue中實(shí)現(xiàn)一個(gè)樹形結(jié)構(gòu)的下拉多選組件,支持任意一級(jí)選項(xiàng)的選擇,全選功能,以及搜索功能,通過在mounted生命周期中獲取數(shù)據(jù),并使用handleTree函數(shù)將接口返回的數(shù)據(jù)整理成樹形結(jié)構(gòu),實(shí)現(xiàn)了這一功能,感興趣的朋友一起看看吧2025-01-01Vue實(shí)現(xiàn)阻止瀏覽器記住密碼功能的三種方法
本文主要介紹了Vue實(shí)現(xiàn)阻止瀏覽器記住密碼功能的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Vue router的addRoute方法實(shí)現(xiàn)控制權(quán)限方法詳解
這篇文章主要介紹了vue動(dòng)態(tài)路由添加,vue-router的addRoute方法實(shí)現(xiàn)權(quán)限控制流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09