概览
download: Next.js+React+Node系统实战,搞定SSR服务器渲染
f复制下载ZY:https://www.sisuoit.com/2811.html
官方文档说明:
- 用法:
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
疑问:
- DOM 更新循环是指什么?
- 下次更新循环是什么时候?
- 修改数据之后使用,是加快了数据更新进度吗?
- 在什么情况下要用到?
原理
异步说明
Vue 实现响应式并 不是数据发生变化之后 DOM 立即变化 ,而是按一定的策略进行 DOM 的更新。
在 Vue 的 文档 中,说明 Vue 是 异步 执行 DOM 更新的。关于异步的解析,可以查看阮一峰老师的 这篇文章 。截取关键部分如下:
具体来说,异步执行的运行机制如下。
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
下图就是主线程和任务队列的示意图。
事件循环说明
简单来说,Vue 在修改数据后,视图不会立刻更新,而是等 同一事件循环 中的所有数据变化完成之后,再统一进行视图更新。
知乎 上的例子:
//改变数据
vm.message = 'changed'
//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新
console.log(vm.$el.textContent) // 并不会得到'changed'
//这样可以,nextTick里面的代码会在DOM更新后执行
Vue.nextTick(function(){
console.log(vm.$el.textContent) //可以得到'changed'