当前位置: 首页 > news >正文

手写 Vue 源码 === reactive 方法

目录

1. 响应式系统概述

2. Proxy与Reflect的应用

3. 响应式对象的创建

4. WeakMap的使用

主要特点 

WeakMap 与 Map 的区别

应用场景 

5. 依赖收集与触发更新

6. 响应式标记

7. 性能优化

8. 与Vue2的对比

9. 实际应用示例

10. 总结


Vue3的响应式系统是其核心特性之一,它允许我们以声明式的方式构建交互式用户界面。本文将深入探讨Vue3响应式系统的实现原理,特别是@vue/reactivity包的内部工作机制。

1. 响应式系统概述

Vue3的响应式系统主要由以下几个部分组成:

  • reactive: 创建响应式对象
  • effect: 副作用函数,当依赖的响应式数据变化时自动执行
  • baseHandler: 定义Proxy的处理器

这些组件协同工作,构成了一个高效的响应式系统。

2. Proxy与Reflect的应用

Vue3的响应式系统使用ES6的Proxy API来拦截对象的操作,结合Reflect API来执行默认行为。

baseHandler.ts

export enum ReactiveFlags {IS_REACTIVE = "__v_isReactive",
}
// 「Proxy 需要搭配 Reflect 使用 处理get set」
export const mutableHandlers: ProxyHandler<any> = {get(target: any, key: any, receiver: any) {// 如果访问的是代理对象的属性,直接返回if (key === ReactiveFlags.IS_REACTIVE) {return true;}// 依赖收集 todo...return Reflect.get(target, key, receiver); // 等价于receiver[key]},set(target: any, key: any, value: any, receiver: any) {// 找到属性 让对应的 effect 执行// 「触发更新 todo...」return Reflect.set(target, key, value, receiver);},
};

这里的mutableHandlers定义了如何拦截对象的属性访问和修改操作:

  • get: 当访问响应式对象的属性时,除了返回属性值,还会进行依赖收集
  • set: 当修改响应式对象的属性时,除了设置新值,还会触发更新

使用Reflect而不是直接操作对象的原因是为了保持正确的this上下文,特别是在处理getter和setter时。

3. 响应式对象的创建

reactive.ts

import { isObject } from "@vue/shared";
import { mutableHandlers, ReactiveFlags } from "./baseHandler"

相关文章:

  • Vim 命令从头学习记录
  • Java设计模式: 工厂模式与策略模式
  • 使用 JavaScript 实现数据导出为 Excel 和 CSV 文件
  • #基础Machine Learning 算法(上)
  • 大模型微调Fine-tuning:从概念到实践的全面解析
  • LeetCode算法题 (反转链表)Day17!!!C/C++
  • Excel VBA 自定义函数
  • 学习路线(机器人系统)
  • 【中间件】brpc_基础_TimerThread
  • Visual Studio 项目转Qt项目
  • 抖音生活服务“五一”数据:小城游火爆,“食住”消费增速显著
  • LeetCode:返回倒数第k个结点
  • 【论文阅读】Joint Deep Modeling of Users and Items Using Reviews for Recommendation
  • 部署GM DC Monitor 一体化监控预警平台
  • CGAL:Circular_kernel_2内核
  • 设计模式-基础概念学习总结(继承、多态、虚方法、方法重写)
  • 策略模式(Strategy Pattern)
  • ansible基础-优化
  • 路由器详细讲解
  • 驱动开发硬核特训 · Day 28(上篇):pinctrl 子系统详解与实战分析
  • 数据中心业务今年预增50%,丹佛斯:中国是全球最重要的市场
  • “五一”假期国内出游3.14亿人次,国内游客出游总花费1802.69亿元
  • “五一”假期预计全社会跨区域人员流动量累计14.67亿人次
  • 无畏契约新王诞生:属于电竞世界的凯泽斯劳滕奇迹
  • 五一车市消费观察:政策赋能、企业发力,汽车消费火热
  • 新华社:让历史照鉴未来