控制臺輸出:父組件中的age值為:2子組件中的age值為:1父組件改變age值后:5毫秒,子組件才監控到變化,變化前age:1,變化后age:2,此時子組件中的age值為:2父組件中的age值為:3子組件中的age值為:2父組件改變age值后:1毫秒,子組件才監控到變化,變化前age:2,變化后age:3,此時子組件中的age值為:3
2 回答

胡子哥哥
TA貢獻1825條經驗 獲得超6個贊
只說說結果為什么是這樣子
請考慮如下同步代碼,那下面的代碼會發生什么?watch
3遍嗎?不,通常來說,用戶并不更新中間變了什么值,值關心一次marcotask
最后的值變成了什么樣。
this.age++this.age++this.age++
所以vue
是怎么做的呢,放microtask
里。scheduler.js#L176
當然如果你需要同步更新子組件也不是不可以,加上Vue.config.async = false
,但這個特性很快也會被移除。Vue-config-async-移除

蕭十郎
TA貢獻1815條經驗 獲得超13個贊
我理解著應該是子組件的age和父組件的age應該是同一個值,父組件值改變了,子組件瞬間改變
那你理解錯了,如果按你所說的父子組件的age指向同一個值的話,vue的子組件也不需要使用$emit()事件來跟父組件通訊了。至于vue為什么要這么做,好像教程里也有寫。
單向數據流
所有的 prop 都使得其父子 prop 之間形成了一個單向下行綁定:父級 prop 的更新會向下流動到子組件中,但是反過來則不行。這樣會防止從子組件意外改變父級組件的狀態,從而導致你的應用的數據流向難以理解。額外的,每次父級組件發生更新時,子組件中所有的 prop 都將會刷新為最新的值。這意味著你不應該在一個子組件內部改變prop。如果你這樣做了,Vue 會在瀏覽器的控制臺中發出警告。
- 2 回答
- 0 關注
- 1334 瀏覽
添加回答
舉報
0/150
提交
取消