控制台输出:父组件中的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条经验 获得超12个赞
我理解着应该是子组件的age和父组件的age应该是同一个值,父组件值改变了,子组件瞬间改变
那你理解错了,如果按你所说的父子组件的age指向同一个值的话,vue的子组件也不需要使用$emit()事件来跟父组件通讯了。至于vue为什么要这么做,好像教程里也有写。
单向数据流
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。
- 2 回答
- 0 关注
- 1292 浏览
添加回答
举报
0/150
提交
取消