为啥$nextTick放在$emit上面就拿不到value更新?

有一个关于$nextTick的问题请教下。

// 为啥$nextTick放在$emit上面就拿不到value更新?
this.$nextTick(() => {
  this.value; // 没更新(value是用v-model传递的props)
})
this.$emit('input', 123);

如果把$nextTick放在$emit下面就可以

this.$emit('input', 123);
this.$nextTick(() => {
  this.value; // 更新了
})

$nextTick是异步触发的,它等待数据刷新难道不包括$emit这种嘛,或者说$emit比$nextTick更慢呢?如果更慢的话放在下面一行为啥就能拿到更新了呢?

阅读 2k
1 个回答

this.$emit('input',123)后,input时间的监听函数会被同步执行,但是其中对data的修改会放到一个异步队列中,nextTick也是将一个函数放入异步队列中,而你的前一种写法,读取value的函数,在对data的更新先入队,所以获取不到更新后的值,而第二种在后入队的话就能读到
参考地址https://cn.vuejs.org/v2/guide...
image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题