Vue 数据响应式过程

Vue 的数据响应式过程涉及 initstate 初始化、initData、observe、Observer、defineReactive、Dep 和 Watcher。数据通过 observe 转换为响应式,Observer 使用 defineReactive 为对象和数组创建 getter 和 setter,收集依赖。数组方法被增强以确保响应性,Watcher 分为 Computed、用户定义和渲染 Watcher,负责在数据变化时更新视图。
摘要由CSDN通过智能技术生成

数据响应式过程

1.入口 src/core/instance/init.js
initstate(vm) vm状态的初始化
初始化了_data,_props,methods等
调用了 initData(vm)

  1. 在 initData中 获取传入的数据,调用observe方法接收data并做出响应式的处理

  2. observe在接收数据,创建一个 new Observer对象,将其 对应的数据转换为set/get

  3. Observer 中 缓存了对应的数据在_ob_上,对数组和对象做了对应的处理,
    数组增强了一些原生的方法,例如push,等
    对象的话,调用walk方法,遍历属性调用defineReactive转换为 响应式数据

  4. defineReactive 中 会先将用户传入的get/set缓存起来,在进行是否是递归对象处理的执行
    通过Object.defineProperty 进行set/get的 处理,
    get中先调用用户传入的getter,然后返回值,中间会有通过Dep收集依赖过程

  5. 收集依赖的过程
    6.1 在 defineReactive 创建 Dep的类,在get中进行依赖收集,就是将依赖该属性的Watcher对象添加到
    Dep对象的subs数组中,数据发生变化时,通知所有的watcher,通过watcher的回调中实现更新
    6.2 observe中的dep.depend是为子对象收集依赖,dep.target中存放watcher对象,dep.depend添加依赖,
    在dep中,使用addDep收集依赖,缓存对应的ID

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值