为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2019-02-06 19:07:07
控制台输出:父组件中的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个赞

只说说结果为什么是这样子

请考虑如下同步代码,那下面的代码会发生什么?watch3遍吗?不,通常来说,用户并不更新中间变了什么值,值关心一次marcotask最后的值变成了什么样。

this.age++this.age++this.age++

所以vue是怎么做的呢,放microtask里。scheduler.js#L176
当然如果你需要同步更新子组件也不是不可以,加上Vue.config.async = false,但这个特性很快也会被移除。Vue-config-async-移除


查看完整回答
反对 回复 2019-03-13
?
萧十郎

TA贡献1815条经验 获得超12个赞

我理解着应该是子组件的age和父组件的age应该是同一个值,父组件值改变了,子组件瞬间改变

那你理解错了,如果按你所说的父子组件的age指向同一个值的话,vue的子组件也不需要使用$emit()事件来跟父组件通讯了。至于vue为什么要这么做,好像教程里也有写。

单向数据流
所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。

额外的,每次父级组件发生更新时,子组件中所有的 prop 都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变prop。如果你这样做了,Vue 会在浏览器的控制台中发出警告。


查看完整回答
反对 回复 2019-03-13
  • 2 回答
  • 0 关注
  • 1292 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信