IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue的学习笔记--变化侦测(一) -> 正文阅读

[JavaScript知识库]Vue的学习笔记--变化侦测(一)

Object的变化侦测

? 变化侦测就是侦测数据的变化。当数据发生变化时,要能侦测到并且发出通知

? Object可以通过 Object.defineProperty 将属性转换成getter/setter 的形式来追踪变化。读取数据时会触发 getter ,修改数据时会触发 setter。

? 我们需要在 getter 中收集有哪些依赖使用了数据,当 setter 被触发时,去通知 getter 中收集的依赖数据发生了变化。

? 收集依赖需要为依赖找寻一个可以存储依赖的地方,为此我们创建了 Dep ,它用来收集依赖,删除依赖和向依赖发送消息等。

? 所谓的依赖,其实就是 Watcher 。只有 Watcher 触发的 getter 才会收集依赖。哪个 Watcher 触发了getter,就把哪个 Watcher 收集到 Dep 中。当数据发生变化时,会循环依赖列表,把所有的 Watcher 都通知一遍。

? Watcher 的原理是先把自己设置到全局唯一的指定位置(例如 window.target),然后读取数据。因为读取了数据,所以会触发这个数据的 getter。接着,在 getter 中就会从全局唯一的那个位置读取当前正在读取数据的 Watcher ,并把这个 Watcher 收集到 Dep 中去,通过这样的方式,Watcher 可以主动去订阅任意一个数据的变化。

? 此外,我们创建了 Observer 类,它的作用是把一个 object 中的所有数据(包括子数据)都转换成响应式的,也就是它会侦测 object 中的所有数据(包括子数据)的变化。

? 由于 ES6 之前 JavaScript 并没有提供元编程的能力,所以在对象上新增属性和删除属性都无法被追踪到。为了解决这个问题,Vue.js提供了两个 API ---- vm. s e t 与 v m . set 与 vm. setvm.delete。

? 下图给出了Data、Observer、Dep 和 Watcher 之间的关系。

在这里插入图片描述

? Data 通过 Observer 转换成了 getter/setter 的形式来追踪变化。

? 当外界通过 Watcher 读取数据时,会触发 getter 从而将 Watcher 添加到依赖中。

? 当数据发生了变化时,会触发 setter ,从而向 Dep 中的依赖 (Watcher)发送通知。

? Watcher接受到通知后,会向外界发送通知,变化通知到外界后可能会触发视图更新,也有可能触发用户的某个回调函数等。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:27:32  更:2021-07-10 14:27:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/8 13:51:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码