在面對(duì)單個(gè)組件邏輯復(fù)雜需要拆分時(shí),難免會(huì)遇到父子組件之間數(shù)據(jù)傳遞的問題。那么我們來了解一下在父子組件之間進(jìn)行數(shù)據(jù)傳遞時(shí)需要遵循哪些約定,以及要注意哪些問題。
如何傳遞
父組件向子組件在進(jìn)行傳遞時(shí),使用的是 prop 特性進(jìn)行傳遞。
約定
老規(guī)矩, 在使用前我們首先了解應(yīng)該怎么使用,有哪些約束條件:
子組件的 props 中定義要傳遞的變量名 變量名同組件的命名規(guī)范 父組件傳值時(shí),需要使用 短橫線分隔命名 使用 v-bind 進(jìn)行傳值定義
首先在子組件中定義:
// Child.vue
export default { name: 'child' props: ['teamList']}這里使用了 駝峰命名 ,在傳值時(shí)需注意要轉(zhuǎn)換成 短橫線分隔命名 。
我們定義了一個(gè) teamList 的變量,此時(shí)我們就可以在這個(gè)組件中通過 this 使用這個(gè)變量了(同 data 中的數(shù)據(jù))。
傳值
在父組件中進(jìn)行傳值:
<template> <div> <child v-bind:teamList="teamList"></child> </div></template>
父組件中使用 v-bind 即可將數(shù)據(jù)傳遞下去了。
向子組件傳遞數(shù)據(jù)就是這么簡(jiǎn)單,本質(zhì)上和 data 一樣,只是這里單獨(dú)使用 prop 特性將其區(qū)分開來。
需要注意的時(shí):
通過 prop 特性傳遞下去的數(shù)組是 “單向”綁定的,父組件對(duì)數(shù)組的更新會(huì)影響到子組件。因此并不建議子組件對(duì) prop 特性中的值進(jìn)行修改
Js中在傳遞對(duì)象和數(shù)組時(shí)傳遞的時(shí)引用!因此:當(dāng)子組件修改父組件傳遞下來的對(duì)象/數(shù)組時(shí)會(huì)影響到父組件中的狀態(tài)
這個(gè)特性有利有弊,在某些情況下可以通過這種類似 hack 的方式來進(jìn)行處理。
子組件反向傳遞
上面說到了,并不建議在子組件中修改 props 中的數(shù)據(jù)。那么當(dāng)需要向父組件進(jìn)行某種 反饋 時(shí)怎么辦呢?
假設(shè)現(xiàn)在我們有一個(gè)登錄彈出框的組件,通過子組件的方式調(diào)用了,當(dāng)我們登錄成功時(shí)該如何 通知 父組件做出相應(yīng)的反應(yīng)呢?
這里只介紹第一種方式,因?yàn)楹髢煞N方式若羽也沒用過幾次 o(╯□╰)o
emit使用約定
事件名的命名規(guī)范同組件 父組件在綁定子組件上的自定義事件時(shí),必須 完全匹配 事件名,這里不像組件與子組件中使用時(shí)是使用的 短橫線分隔命名 ,而是 完全匹配 。約定較少,主要注意使用時(shí)是和組件不同的,名稱需要完全匹配。
新聞熱點(diǎn)
疑難解答
圖片精選