你知道nextTick的原理吗?
-
用法:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
Vue官网
提到DOM的更新是异步执行的,只要数据发生变化,将会开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个 watcher 被多次触发,只会被推入到队列中一次。简单来说,就是当数据发生变化时,视图不会立即更新,而是等到同一事件循环中所有数据变化完成之后,再统一更新视图。
关于异步的解析,可以查看阮一峰老师的这篇文章,具体来说,异步执行的运行机制如下。
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。
例子:
//改变数据 vm.message = 'changed' //想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新 console.log(vm.$el.textContent) // 并不会得到'changed' //这样可以,nextTick里面的代码会在DOM更新后执行 Vue.nextTick(function(){ console.log(vm.$el.textContent) //可以得到'changed' })
那么,Vue内部是如何实现的呢?
可以了解一下哇 NextTick - 源码版 之 独立自身
-
React中你知道creatClass的原理吗?
2021-01-11 关注 0 浏览180 0答案
-
你知道redux-saga的原理吗?
2021-01-11 关注 0 浏览152 0答案
-
你知道短链接的生成原理吗?
2021-01-11 关注 0 浏览68 1答案
-
你知道Virtual DOM的工作原理吗?
2021-01-11 关注 0 浏览241 1答案
-
你知道koa的中间件原理吗?
2021-01-11 关注 0 浏览462 4答案
-
你有做过直播相关开发吗?知道它的原理吗?
2021-01-11 关注 0 浏览149 2答案
-
你有做过扫码枪的开发吗?知道它的原理吗?
2021-01-11 关注 0 浏览317 3答案
-
你有开发过弹幕吗?知道它的原理吗?说说看
2021-01-11 关注 0 浏览111 3答案
-
你知道v-model的原理吗?说说看
2021-01-11 关注 0 浏览1297 6答案
-
你知道style加scoped属性的用途和原理吗?
2021-01-11 关注 0 浏览608 6答案