当前位置: 首页 > 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 架构。

http://www.xdnf.cn/news/670087.html

相关文章:

  • UE5 Mat HLSL - Load
  • LeetCodeHot100_0x09
  • 纯C++ 与欧姆龙PLC使用 FINS TCP通讯源码
  • NSSCTF-[闽盾杯 2021]DNS协议分析
  • 为什么单张表索引数量建议控制在 6 个以内
  • InvokeAI 笔记, 简单了解一下 (生成图片,text2img )
  • MQTT over SSL/TLS:工业网关如何构建端到端加密的数据传输通道
  • MySQL 只知道表名不知道具体库?如何查询?information_schema入手
  • ssh 测试 是否可以连通docker 容器
  • Excel常用公式全解析(1):从基础计算到高级应用
  • 如何理解UDP 和 TCP 区别 应用场景
  • 笔记: 在WPF中ContentElement 和 UIElement 的主要区别
  • 2025年土建施工员备考考试真题及答案
  • 数据库MySQL学习——day13(索引与查询优化)
  • gcc clang
  • FastMoss 国际电商Tiktok数据分析 JS 逆向 | MD5加密
  • 安全监测预警系统的核心价值
  • Jmeter一些元件使用的详细记录
  • VR 赋能病毒分离鉴定:开启微观探索新视界
  • 微软开源bitnet b1.58大模型,应用效果测评(问答、知识、数学、逻辑、分析)
  • 数据分析实战1(Excel制作报表)
  • 【NLP基础知识系列课程-Tokenizer的前世今生第五课】从静态到可学:Tokenizer 的自适应演化之路
  • LVS负载均衡群集
  • 语音识别算法的性能要求一般是多少
  • Day128 | 灵神 | 二叉树 | 反转二叉树的奇数层
  • 软件同步机制-Peterson解决方案 简单讲解
  • 攻防世界-你猜猜
  • js判断当前设备是否为移动端
  • camera_venc_thread线程获取高分辨率编码码流
  • Vue组件化