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