在vue中,为什么父组件的值改变后,过几毫秒子组件才能watch到prop的变化?附代码

控制台输出:


父组件中的age值为:2


子组件中的age值为:1


父组件改变age值后:5毫秒,子组件才监控到变化,变化前age:1,变化后age:2,此时子组件中的age值为:2


父组件中的age值为:3


子组件中的age值为:2


父组件改变age值后:1毫秒,子组件才监控到变化,变化前age:2,变化后age:3,此时子组件中的age值为:3


呼如林
浏览 1293回答 2
2回答

胡子哥哥

只说说结果为什么是这样子请考虑如下同步代码,那下面的代码会发生什么?watch3遍吗?不,通常来说,用户并不更新中间变了什么值,值关心一次marcotask最后的值变成了什么样。this.age++this.age++this.age++所以vue是怎么做的呢,放microtask里。scheduler.js#L176当然如果你需要同步更新子组件也不是不可以,加上Vue.config.async = false,但这个特性很快也会被移除。Vue-config-async-移除

萧十郎

我理解着应该是子组件的age和父组件的age应该是同一个值,父组件值改变了,子组件瞬间改变那你理解错了,如果按你所说的父子组件的age指向同一个值的话,vue的子组件也不需要使用$emit()事件来跟父组件通讯了。至于vue为什么要这么做,好像教程里也有写。单向数据流所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
打开App,查看更多内容
随时随地看视频慕课网APP