当前位置: 首页 > news >正文

怎么自己做砍价网站从域名到网站

怎么自己做砍价网站,从域名到网站,快速排名提升,株洲百度推广开户前言 在上一篇 如何理解 vue 响应式? 中,了解到响应式其实是通过 Observer 类中调用 defineReactive() 即 Object.defineProperty() 方法为每个目标对象的 key(key 对应的 value 为非数组的) 设置 getter 和 setter 实现拦截&…

前言

在上一篇 如何理解 vue 响应式? 中,了解到响应式其实是通过 Observer 类中调用 defineReactive() 即 Object.defineProperty() 方法为每个目标对象的 key(key 对应的 value 为非数组的) 设置 gettersetter 实现拦截,分别进行 依赖收集依赖更新通知,而 vue 的异步更新就在 setter 中的 dep.notify() 之后进行开启.

深入源码

下面针对源码的解读内容都在源码对应截图的注释中,就不在进行单独描述.

dep.notify() 方法

在这里插入图片描述

watcher.update() 方法

在这里插入图片描述

queueWatcher() 方法

在这里插入图片描述

flushSchedulerQueue() 方法

在这里插入图片描述

watcher.run() 方法

在这里插入图片描述

watcher.get() 方法

在这里插入图片描述

nextTick() 方法

在这里插入图片描述

timerFunc() 方法

timerFunc() 其实就是利用了浏览器的异步任务队列去执行 flushCallbacks() 方法,这整个过程其实就是 优雅降级

  • 首先判断当前环境是否支持 Promise,如果支持,就用 Promise 来触发回调函数
  • 如果不支持 Promise 就判断是否支持 MutationObserver,通过观察文本节点发生变化,去触发执行异步回调函数
  • 如果不支持 MutationObserver 就判断是否支持 setImmediate,如果支持,就通过 setImmediate 来触发回调函数
  • 如果以上都不支持就只能用 setTimeout 来完成异步执行

关于 PromiseMutationObserver浏览器异步任务 等内容如果你还不算足够了解,那么在文末会给出的对应文章链接以提供大家去学习和深入了解.

在这里插入图片描述

flushCallbacks() 方法

flushCallbacks() 方法会去清空 callbacks 数组并执行所有在 nextTick() 中保存的函调函数.
在这里插入图片描述

总结

vue 中如何实现异步更新?

vue 中的异步更新机制主要是利用了 浏览器的异步任务队列 来实现的,首选 微任务队列,其次选 宏任务队列

当响应式数据发生更改后,会在 setter 中调用 dep.notify 方法,通知 dep 中收集的所有 watcher 执行更新,即调用 watcher.update 方法,这个方法会把当前 watcher 加入到全局的 watcher 队列 queue(其实就是数组)

然后通过 nextTick 方法把 刷新 watcher 队列的方法,即 flushSchedulerQueue() 添加到全局的 callbacks 数组当中。

如果当前浏览器的异步任务队列中 不存在 flushCallbacks 函数,就通过 timerFunc 方法使用异步去执行 flushCallbacks 方法,这个方法会把 callbacks 清空并执行里面所有 flushSchedulerQueue 函数。

如果当前浏览器的异步任务队列中 存在 flushCallbacks 函数,那么就会等待当前异步队列中的 flushCallbacks 函数执行完成后,在加入下一个 flushCallbacks 函数。

其中负责刷新 watcher 队列的 flushSchedulerQueue() 函数,就会执行 queue 队列中的每个 watcher.run() 方法,从而进入更新阶段,如:执行组件的更新函数 updateComponents 或执行用户 watch 回调。

vue 中的 nextTick 原理是什么?

Vue-nextTick 在官方文档解释中,是用于在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的 DOM。

  • nextTick 中,会把接收的回调函数 cb 使用 try catch 进行包裹,目的是方便进行异常捕获,之后会把这个 cb 存入到 全局的 callbacks 数组中
  • 执行 timerFunc,通过浏览器的异步循环队列去执行 flushCallbacks 函数清空 callbacks 数组并执行里面的回调函数
http://www.yayakq.cn/news/723393/

相关文章:

  • 免费网站源码博客做外贸用什么网站比较好
  • 网站建设报告家教总结企业网查询是什么
  • 湖南高端网站制怎么做游戏自动充值的网站
  • 网站加入地图导航光做网站推广咋样
  • 云南网站建设费用淮南服装网站建设地址
  • 网站上线过程北京专业建设
  • 自助建站系统下载房子设计师怎么找
  • 中药网站模板盐山建网站
  • 贾汪网站开发directory portal wordpress theme
  • 深圳市网站建设公司dw制作一个环保网站模板下载
  • 一个网站建设大概需要多少费用深圳软件app开发公司
  • 护肤网站模版广告投放效果评估
  • 校园网站建设管理最新一键自助建站程序源码
  • 可以兼职做设计的网站wordpress 什么意思
  • 新干县城乡建设局网站彩票网站开发 添加彩种教程
  • 微信公众号做视频网站吗莱芜论坛都市网
  • 利用网站做淘宝客什么网站比较好
  • 东莞外贸网站建设哪家好绍兴网站开发08keji
  • 龙岗住房和建设局网站intellij 网站开发
  • 北京做网站建设公司哪家好北京网站建设公司哪个最好
  • 临沂医院网站建设免费推广手段
  • 怎么欣赏一个网站设计图海外网入口
  • 网站焦点图设计pr
  • 北京网站建设公司房山华网做淘宝主要看哪些网站
  • 专业营销型网站建设公司12333上海公共招聘网官网
  • 建设网站和网页有啥区别广州建设网站的公司哪家好
  • 有没有能帮人快速网站备案的机构网站开发怎么才能接到私活
  • 纪检部门网站举报建设分类信息网站推广的意义
  • 手机网站页面制作合肥高端网站建设公司
  • 个人网站转为企业网站成都纯手工seo