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

学习记录(Vue3响应式)

Vue3用Proxy替代Object.defineProperty,解决了:
数组索引变化检测,动态添加属性,更细粒度的依赖追踪。

关键点:Proxy拦截对象操作,在get时收集依赖,在set时触发更新,实现数据变化自动更新视图。

Proxy示例:

const obj = { count: 0 }
const proxy = new Proxy(obj, {get(target, key) { console.log('读取', key); return target[key] },set(target, key, val) { console.log('修改', key); target[key] = val; return true }
})

实现依赖收集:

let activeEffect = nullclass Dep {constructor() { this.subscribers = new Set() }depend() { if (activeEffect) this.subscribers.add(activeEffect) }notify() { this.subscribers.forEach(fn => fn()) }
}function effect(fn) {activeEffect = fnfn()activeEffect = null
}function reactive(obj) {const deps = new Map()return new Proxy(obj, {get(target, key) {let dep = deps.get(key)if (!dep) {dep = new Dep()deps.set(key, dep)}dep.depend()  // 收集依赖return target[key]},set(target, key, val) {target[key] = valconst dep = deps.get(key)if (dep) dep.notify()  // 触发更新return true}})
}

示例:

const state = reactive({ count: 0 })effect(() => {console.log('count变化:', state.count)
})state.count = 1  // 自动输出: "count变化: 1"

对比Vue2优势

方面 Vue2 Vue3
数组检测 需重写方法 直接支持
新增属性 需Vue.set 直接响应
性能 递归遍历所有属性 按需代理
http://www.jsqmd.com/news/353734/

相关文章:

  • HVI-CIDNet实战解析:如何通过新型色彩空间实现低光图像的高效增强
  • 全新ZipArchives插件:可在ONLYOFFICE协作空间中解压ZIP文件 - 详解
  • BetaFlight电流校准实战:从采样电路到线性拟合的完整解析
  • 思科企业网络毕业设计入门指南:从拓扑规划到基础配置实战
  • CosyVoice本地部署CPU优化实战:从模型压缩到推理加速
  • 避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过
  • 从零构建:FPGA与Tri Mode Ethernet MAC的UDP协议栈实战解析
  • 智能客服对话系统实战:基于大模型的快速入门与避坑指南
  • 【嵌入式开发实战】-5.1-深入解析CodeWarrior工程中的map文件内存布局
  • 使用Dify构建企业级智能客服机器人的架构设计与实战
  • ChatTTS增强版:从语音合成原理到高性能实现
  • LightGBM中early_stopping_rounds参数的正确使用方式与常见报错解析
  • HCCL与PyTorch集成 hccl_comm.cpp DDP后端注册全流程
  • ChatGPT写论文指令:从技术原理到高效实践指南
  • ChatGPT归档全指南:从数据存储到检索优化实战
  • ChatGPT DNS 解析优化实战:提升AI服务响应效率的架构设计
  • 高效调用cosyvoice官方CLI:inference_instruct最佳实践与性能优化
  • 解决 CosyVoice OSError: Could Not Find/Load Shared Object File 的高效实践指南
  • 从零到一:AD模块化布局的高效工作流解析
  • ChatTTS CPU版部署实战:从环境配置到避坑指南
  • 2001-2025年各省统计年鉴汇总
  • AI 辅助开发实战:基于 Java Web 的毕业设计选题系统设计与实现
  • ESP32开发环境全攻略:VSCode与PlatformIO的完美结合
  • 从零到英雄:如何用STM32打造你的第一辆智能避障小车
  • 在线教育平台的用户体验革命:如何用Vue3+SpringBoot打造沉浸式学习环境
  • ChatTTS Python实战:从零构建高自然度语音合成系统
  • 2002-2025年县域红色经典旅游景区数据DID
  • DRC与制造工艺匹配性验证:项目应用
  • 实用指南:在Linux中安装Kdump调试环境
  • PostgreSQL 核心原理:系统内部的对象寻址机制(OID 对象标识符)