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

[Vue] ref及其底层原理

在上一篇文章里我描述了reactive响应式的原理,但是vue3不止只有reactive能创建响应式的对象,它还有ref也能创建响应式对象。
ref的响应式原理是与reactive一样的吗?

先说结论:是的!

我之前一直以为ref是vue2的Object.defineProperty的实现而且一直被误导了很久,甚至还在某次面试上大言不惭的说ref是基于Object.defineProperty实现的,现在想来还真是头铁呢!

ref本身其实与reactive并无多大的区别,响应式也是reactive那一套(effect()track()trigger()),而设计出ref的原因只是因为reactive必须传入一个引用类型,因为proxy只能代理对象,而像是基础类型什么number string bool啥的它是没法代理的。所以本质上ref只是一层ractive的语法糖,通过包装成.value的对象进而被Proxy代理。
类似这样的:

function ref(value) {// 把原始值转换为响应式对象(如果是对象)const wrapper = {get value() {track(wrapper, 'value');    // 收集依赖return value;},set value(newVal) {if (newVal !== value) {value = newVal;trigger(wrapper, 'value'); // 触发依赖}}};return wrapper;
}

结论

ref 是 Vue 3 用来让基础类型响应式的语法糖,它的 .value 是响应系统的出口,底层实现并不再使用 Vue 2 的 Object.defineProperty,而是走统一的 Proxy + track/trigger 架构。

相关文章:

  • 单片机(MCU)的 IO 口静电、浪涌、电压异常等保护
  • 【机器学习基础】机器学习入门核心算法:支持向量机(SVM)
  • 大模型的开发应用(四):深度学习模型量化与QLoRA微调
  • WordPress免费网站模板下载
  • Android studio 查看aar源码出现/* compiled code */
  • 三天掌握PyTorch精髓:从感知机到ResNet的快速进阶方法论
  • LeetCodeHot100_0x09
  • 大模型(6)——语义分割
  • 三十、面向对象底层逻辑-SpringMVC九大组件之HandlerInterceptor接口设计
  • 程序环境与预处理
  • Abstract Factory(抽象工厂)
  • FPGA中的“BPI“指什么
  • CPU服务器的主要功能有哪些?
  • 【Java Web】5.Mybatis
  • 零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【2/3 适合小白,步骤详细!!!】
  • 基于Python爬虫技术的对歌曲评论数据可视化分析系统
  • pythonday30
  • Linux基础I/O【文件理解与操作】
  • 嵌入式高级工程师面试全解:从 malloc 到 kernel panic 的系统知识梳理
  • 从0开始学习R语言--Day11--主成分分析
  • 深圳做营销网站的公司哪家好/在线教育
  • 吉林做网站的公司/培训心得
  • 宜都网站设计/销售培训课程
  • 尊园地产做的网站/外贸订单一般在哪个平台接?
  • wap手机网站源码/百度经验首页
  • 专业做网站+上海/宁波seo怎么推广