美文网首页
8. nextTick原理

8. nextTick原理

作者: 一土二月鸟 | 来源:发表于2020-10-02 21:10 被阅读0次

nextTick 原理

  • 让一批方法异步的批量处理
  • 原理:将异步需要执行的fn放到数组中,在微任务或宏任务里统一遍历执行。
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>

    var fnArr = [];
    var flag = false;

    function nextTick(fn) {
      fnArr.push(fn);
      if(!flag) {
        flag = true; // Promise只需要执行一次即可,由于then属于微任务,等then开始执行时,fnArr已收集完毕
        Promise.resolve().then(() => {
          fnArr.forEach(fn => fn());
        });
      }
    }

    function render() {
      console.log('render...');
    }
    
    nextTick(render);
    nextTick(render);
    nextTick(render);
    console.log('sync...');
    
  </script>
</body>
</html>

引自

核心答案:

nextTick中的回调是在下次 DOM 更新循环结束之后执行的延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。原理就是异步方法(promise,mutationObserver,setImmediate,setTimeout)经常与事件环一起来问(宏任务和微任务)

#补充回答:

vue多次更新数据,最终会进行批处理更新。内部调用的就是nextTick实现了延迟更新,用户自定义的nextTick中的回调会被延迟到更新完成后调用,从而可以获取更新后的DOM。

#快速Mock:

let cbs = [];
let pending = false;
function flushCallbacks() {
    cbs.forEach(fn=>fn());
}
function nextTick(fn) {
    cbs.push(fn);
    if (!pending) {
        pending = true;
        setTimeout(() => {
            flushCallbacks();
        }, 0);
    }
}
function render() {
    console.log('rerender');
};
nextTick(render)
nextTick(render)
nextTick(render);
console.log('sync...')

源码位置:src/core/global-api/mixin:5src/core/util/next-tick.js:87

相关文章

  • 8. nextTick原理

    nextTick 原理 让一批方法异步的批量处理 原理:将异步需要执行的fn放到数组中,在微任务或宏任务里统一遍历...

  • nextTick原理

  • 深入理解nextTick()

    这篇文章主要讲一下nextTick()的使用,event loop,和vue中nextTick()的原理,以及在使...

  • wxmp_note1

    setData 类似于 nextTick 原理 that.setData({commentsList: res.d...

  • nextTick实现原理

    vue的nextTick方法的实现原理:vue用异步队列的方式来控制DOM更新和nextTick回调先后执行mic...

  • 关于vue常见的题目

    1. 简述vue响应式原理 2. 计算属性的原理 3. Vue.nextTick 原理 用法: 理解:nextTi...

  • vue nextTick原理

    vue nextTick原理 前面谈到了vue2.x的响应式原理[https://juejin.im/post/6...

  • nextTick的原理

    什么是nextTick呢?nextTick,我可以理解为next是下一个的意思,在事件循环中,每进行一次循环操作称...

  • nextTick实现原理

    为什么会有nextTick这个东西的存在? 因为 vue 采用的异步更新策略,当监听到数据发生变化的时候不会立即去...

  • 双十一,打包半价理解Vue的nextTick与watcher以及

    Vue之nextTick理解 前言 一开始就只想搞清楚nextTick的一个原理,谁知道,跟吃了辣条一下,停不下来...

网友评论

      本文标题:8. nextTick原理

      本文链接:https://www.haomeiwen.com/subject/qyhiuktx.html