vue3中侦听器配置项flush:"post"在组件更新后执行,而nextTick API等待下一次 DOM更新刷新,请问二者的使用有什么区别呢
vue3中侦听器配置项flush:"post"在组件更新后执行,而nextTick API等待下一次 DOM更新刷新,请问二者的使用有什么区别呢
5 回答1.4k 阅读
4 回答1.2k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
5 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
1 回答877 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
可以看做是一样的,都是在数据更新后获取最新dom
因为
vue3
的更新队列分了三种pre
、queue
、post
,执行顺序也是在一个函数里先调用pre
后调用queue
最后是post
vue在创建组件的时候,注册了
render
的监听,当render
内的数据变更,将update
放在了queue
队列,这个走的不是watch
,是直接用的ReactiveEffect
(watch
也是对ReactiveEffect
的二次封装)当我们使用
watch
的时候,flush
默认是pre
,也就是当数据变更后监听回调被放入pre
队列所以:
watch
的回调,永远比render
先执行而当加了
flush: 'post'
后,回调就被放入post
队列,post
永远比queue
后执行下面是
nextTick
nextTick
跟上面的不是同一个promise
这个不知道能不能理解当数据第一次变更后,创建一个新的
promise
(方便理解,其实还是一个),然后所有的队列回调都会push
进这个promise
里的回调调用然后调用
nextTick
后,又创建一个新的promise
所以:
nextTick
永远比 (pre
+queue
+post
) 后执行下面是伪代码: