prop 是單向綁定的:當(dāng)父組件的屬性變化時(shí),將傳導(dǎo)給子組件,但是不會(huì)反過(guò)來(lái)。這是為了防止子組件無(wú)意修改了父組件的狀態(tài)——這會(huì)讓?xiě)?yīng)用的數(shù)據(jù)流難以理解。
另外,每次父組件更新時(shí),子組件的所有 prop 都會(huì)更新為最新值。這意味著你不應(yīng)該在子組件內(nèi)部改變 prop 。如果你這么做了,Vue 會(huì)在控制臺(tái)給出警告。
通常有兩種改變 prop 的情況:
-
prop 作為初始值傳入,子組件之后只是將它的初始值作為本地?cái)?shù)據(jù)的初始值使用;
-
prop 作為需要被轉(zhuǎn)變的原始值傳入。
更確切的說(shuō)這兩種情況是:
1.定義一個(gè)局部 data 屬性,并將 prop 的初始值作為局部數(shù)據(jù)的初始值。
props: ['initialCounter'], data: function () { return { counter: this.initialCounter } }
2.定義一個(gè) computed 屬性,此屬性從 prop 的值計(jì)算得出。
props: ['size'], computed: { normalizedSize: function () { return this.size.trim().toLowerCase() } }
注意在 JavaScript 中對(duì)象和數(shù)組是引用類(lèi)型,指向同一個(gè)內(nèi)存空間,如果 prop 是一個(gè)對(duì)象或數(shù)組,在子組件內(nèi)部改變它會(huì)影響父組件的狀態(tài)。
英文原文地址:https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif