Vue3的响应式核心原理笔记

Vue2和Vue3响应式对比#

  • Vue2响应式基于Object.defineProperty原理实现(观察者模式和发布/订阅模式)

    当创建Vue实例时,vue会遍历data选项的属性

    • 数据劫持:通过Object.defineProperty为属性添加gettersetter对数据的读取进行劫持
    • 依赖收集:通过getter进行依赖收集
    • 派发更新:通过setter进行派发更新

    每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。

    image-20220422152526659

但是基于Object.defineProperty特性无法检测未在data中声明的属性变化,并作出相应的更新

对象和数组都可以采用$set的方式添加响应式的property

  • Vue3响应式原理是基于ES6的Proxy来实现

    1. 当一个值被读取时进行追踪:proxy 的 get 处理函数中 track 函数记录了该 property 和当前副作用。
    2. 当某个值改变时进行检测:在 proxy 上调用 set 处理函数。
    3. 重新运行代码来读取原始值trigger 函数查找哪些副作用依赖于该 property 并执行它们。

未完待续~~

posted @   Bradleyu  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
CONTENTS