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

从以下几个方面来回答这个问题:为什么会有延迟

这个问题要从Virtual Dom说起,Vue的使用者只负责处理状态就行了,真正的页面渲染都交给Virtual Dom来做。并不是我们做的每一次状态修改都会立即触发页面Viritual Dom,会等主任务执行完后,相关操作已放在nextTick(使用Promise, MutationObserver, setImmediate, setTimeout等技术实现),这个过程就会产生延迟。如何做到父改了值立即触发子watch

在Vue 1.0 中有一个配置是async,配置方法如下:

Vue.config.async = false

当设置为false的时候。状态变化后不再使用微任务执行,watch会立即在主任务实行。

对于问题中提供的HTML,打印出来的顺序会是:

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

test.html:94 父组件中的age值为:2

test.html:64 子组件中的age值为:2

每当有任何状态变化,立即触发Observable,子组件的watch就会先于父的下一行代码执行。

但是,vue这么做会有很大的性能问题,所以1.0文档上说这个状态只用于调试。2.0文档上已经标明删除了,但是考虑到兼容性,Vue源码上还保留着,并且源码确保了生产环境不使用sync模式。从Vue 2.0 源码上看这个问题

在更新state后会触发watch,执行了queueWatcher, 相关源码如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值