• Vue 响应式实现原理深入浅出


    前言

    vue 是一个易上手的框架,许多便捷功能都在其内部做了集成,其中最有区别性的功能就是其潜藏于底层的响应式系统。组件状态都是响应式的 JavaScript 对象。当更改它们时,视图会随即更新,这让状态管理更加简单直观。那么,Vue 响应性系统是如何实现的呢?本文也是在阅读了 Vue 源码后的理解以及模仿实现,所以跟随作者的思路,我们一起由浅入深的探索一下vue吧!

    本文 Vue 源码版本:2.6.14,为了便于理解,代码都最简化。

    Vue 是如何实现的数据响应式

    当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter,然后围绕 getter/setter来运行。

    一句话概括Vue 的响应式系统就是: 观察者模式 + Object.defineProperty 拦截getter/setter

    MDN ObjdefineProperty

    观察者模式

    什么是Object.defineProperty ?

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

    简单的说,就是通过此方式定义的 property,执行 obj.xxx 时会触发 get,执行 obj.xxx = xxx会触发 set,这便是响应式的关键。

    Object.defineProperty 是 ES5 中一个无法 shim(无法通过polyfill实现) 的特性,这也就是 Vue 不支持 IE8 以及更低版本浏览器的原因。

    响应式系统基础实现

    现在,我们来基于Object.defineProperty实现一个简易的响应式更新系统作为“开胃菜”

    let data = {};
    // 使用一个中间变量保存 value
    l
  • 相关阅读:
    loguru日志二次封装
    MATLAB环境下简单的基于双向长短时记忆网络的时间序列预测
    python基于PHP+MySQL的个人博客系统毕设
    vue交互
    搭建知识付费系统的最佳实践是什么
    一个超好看的音乐网站设计与实现(HTML+CSS)
    Kotlin(十四)泛型
    双11狂欢最后一天
    docker 交叉编译镜像
    如何恢复回收站删除的文件?
  • 原文地址:https://blog.csdn.net/qq_53225741/article/details/127122084