首页 > 其他分享 >Vue数据响应式底层原理

Vue数据响应式底层原理

时间:2023-02-19 22:12:45浏览次数:50  
标签:funcs function Vue obj 响应 window .__ func 底层

Vue数据响应式底层原理

数据响应式定义:(当数据变化的时候,会自动运行一些相关函数)

  • 原理就是通过Object.defineProperty() 对属性进行劫持,当访问该属性时我们就收集依赖,当数据发生改变后就派发更新
function observe(obj) {
  for (const key in obj) {
    let internalValue = obj[key];
    let funcs = [];
    Object.defineProperty(obj, key, {
      get: function() {
        // (依赖搜集)记录:是哪个函数在用我
        if( window.__func && !funcs.includes( window.__func )) {
          funcs.push( window.__func )
        }
        return internalValue;
      },
      set: function(val) {
        internalValue = val;
        // 自动调用依赖(某个函数在运行期间用到了这个属性,更准确的说 某个函数在运行期间用到了这个get方法)该属性的值
        // (派发更新)运行:执行在用我的函数
        for(let i = 0; i < funcs.length; i++) {
          funcs[i]();
        }
      }
    })
  }
}

function autorun(fn) {
  window.__func = fn;
  fn();
  window.__func = null;
}

标签:funcs,function,Vue,obj,响应,window,.__,func,底层
From: https://www.cnblogs.com/bingquan1/p/17135755.html

相关文章

  • Vue前后端交互、生命周期、组件化开发
    目录Vue前后端交互、生命周期、组件化开发一、Vue用axios与后端交互二、Vue的生命周期三、组件化开发Vue前后端交互、生命周期、组件化开发一、Vue用axios与后端交互​ ......
  • vue-跨域问题解决方案
    1.使用django-cors-headers解决跨域问题1.使用pip安装pipinstalldjango-cors-headers2.添加到setting的app中INSTALLED_APPS=( ... 'corsheaders', ...)//......
  • vue 组件间通信,ref属性,动态组件,插槽,计算属性,监听属性 node环境搭建
    昨日内容回顾#0checkboxv-model只针对于input,做双向数据绑定 -单选:选中或不选中选中就是true,不选中就是false-多选:数组,选了多个,把选中的value值放到......
  • vue_day05
    目录今日内容详细一、组件其他二、组件间通信之父传子三、组件间通信之子传父四、ref属性五、动态组件1、不使用动态组件2、动态组件component标签3、keep-alive保持组件不......
  • vue3-router使用
     1.引入routernpminstallvue-router@4 2.创建文件夹router,并创建index.js文件import{createRouter,createWebHashHistory}from"vue-router"constrouter=cr......
  • 1 [初识]Vue3教程简介与Hello World编写 原创
    阅读目录​​前置知识​​​​下载VSCode​​​​编写第一个HelloWorld​​​​直接引入Vue3.x源码​​前置知识但是你还是需要会下面最基本的知识:1、HTML:超文本标记语......
  • Vue 的生命周期 详细解析(使用场景等)
    Vue生命周期图:  一、生命周期图的解读newVue():首先需要创建一个Vue的实例对象InitEvents&Lifecycle:初始化:生命周期、事件(如:v-once),但数据代理还未开始(vm._d......
  • vue
    第一篇:前端发展历史、vue的介绍及基本使用第二篇:插值语法、指令系统、class和style使用、条件渲染、列表渲染第三篇:js中的循环、key值在循环的作用、数组,对象的检测与更......
  • vue组件间通信,ref属性,动态组件,插槽,计算属性,监听属性
    内容回顾checkboxv-model只针对于input,做双向数据绑定单选:选中或不选中选中就是true不选择就是false多选:数组,选了多个,把选中的value值放到数组中购物车案例check......
  • 前端vue的JsPDF html2canvas 生成pdf并以文件流形式上传到后端(转载)
    原文地址1.首先在文件内引入htmlToPdf.js这里代码引入了html2canvas和jspdf//需要npmihtml2Canvas和npmijspdf在这里将getPdf这个函数挂载到Vue的原型上,最后retu......