①$nextTick和setTimeout有什么区别?
②在实际项目中使用两者哪个会好点?没有优缺点之类的,需要注意什么
在实际项目中遇到元素还没渲染出来就执行了事件,甚至是有些接口先调用了
除了这种延时调用的方法还有更好的解决方案嘛
大神们求解
①$nextTick和setTimeout有什么区别?
②在实际项目中使用两者哪个会好点?没有优缺点之类的,需要注意什么
在实际项目中遇到元素还没渲染出来就执行了事件,甚至是有些接口先调用了
除了这种延时调用的方法还有更好的解决方案嘛
大神们求解
nextTick
在vue 源码中是利用 Promise.resolve()
实现的。该问题实际就是Promise
与setTimeout
的区别,本质是Event Loop
中微任务与宏任务的区别。建议题主系统地去学习下这方面的知识。
nextTick
优先使用微任务,当浏览器均不支持时使用setTimeout
实现。没有绝对说哪个更好,但通常nextTick
就可以,setTimeout
更多是在明确需要定时器的情况下使用。至于你说的元素没渲染先执行事件最好贴下具体代码,大概率是你调用的时机不对
两者使用的情况不同,建议题主可以研究一下官方文档。
$nextTick:一般使用在DOM操作上的,Vue在更新data之后并不会立即更新DOM上的数据,就是说**如果我们修改了data中的数据,再马上获取DOM上的值,我们取得的是旧值**。官网的原话是在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
我们把获取DOM上值的操作放进$nextTick里,就可以得到更新后得数据。
setTimeout:就是个延时回调,和DOM操作无关。
6 回答3k 阅读✓ 已解决
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
nextTick
:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。setTimeout
:只是延迟执行,在延迟执行的方法里,DOM
有可能会更新也有可能没有更新。常规做法就是延迟500ms或者1s
建议使用
nextTick
在有涉及DOM
更新的场景