vue watch 中监听了一些属性,然后在某个事件中 顺序更改这些属性,但是watch触发的顺序却不是根据先赋值触发的

落叶
  • 329

image
如图 应该先打印dd 再打印ss 吧
但是 却是按着watch 中顺序来的 先ss 在dd,
你在watch中顺序换了就 先dd,在ss,跟先后赋值的顺序没关系,这是为啥

回复
阅读 2.3k
3 个回答
✓ 已被采纳

vue的watcher一般是异步执行的,数据更新后往queue队列中不断追加watcher。讲道理queue的轮询应该是按顺序的(从前往后,或从后往前),但是为了保证父组件的watcher在子组件之前运行,所以根据id进行了一次排序,也就是根据watcher的注册顺序进行排序。

所以,你这里因为ss在dd前面注册,所以先运行了dd

因为赋值导致的数据更新是异步的 ……

人间星河灿烂
  • 2
新手上路,请多包涵

这么理解啊,你更新数据之后,虚拟dom发现数据更新,便触发更新。当你的数据全部更新完成之后,watch开始工作,从第一条被监视的数据开始,如果更新就执行定义的内容,然后继续查询后面一条被监视的数据。

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