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

通俗易懂:Vue3的ref()运行机理

ref() 想象成一只 “魔法盒子” ——
你往里面放任何普通的东西(数字、字符串、布尔值、对象、数组……),
盒子立刻把它变成 “带警报器的数据”
谁要是敢改里面的值,警报器立刻响起,Vue 就知道“数据变了,得去更新界面”。


一、为什么要用魔法盒子?

在 Vue3 里,普通的 JavaScript 变量(例如 let count = 0没有魔法
count++ 以后,Vue 根本不知道“数据变了”,界面不会跟着刷新。
于是 Vue 提供了 ref() 这只盒子,让“变量变魔法”。


二、盒子的 3 个关键点(拆开看)

  1. 装进去

    import { ref } from 'vue'
    const count = ref(0)   // 把 0 放进盒子
    
  2. 读出来
    盒子外层是“壳”,真正数据在 .value 里:

    console.log(count.value) // 0
    
  3. 改数据
    只要改 .value,警报器就响:

    count.value = 5          // 触发 Vue 的“更新巡逻队”去刷新界面
    

三、盒子内部到底做了什么?(通俗版)

  1. 壳(RefImpl 对象)
    你拿到的 count 其实是一个对象:

    {_value: 0,         // 真正存数据的地方dep: Set(),        // “订阅列表”——谁在用我?get value() { ... },set value(newVal) {// 1. 保存新值// 2. 拉响警报——通知所有订阅者:数据变了!}
    }
    
  2. Proxy 的魔法
    如果你放的是对象或数组,Vue 会再套一层 Proxy(响应式深层代理)。
    这样即使改对象里的属性,也能触发更新。

    const user = ref({ name: 'Tom' })
    user.value.name = 'Jerry'   // 也能触发界面更新
    

四、在模板里的“语法糖”

<template> 里,Vue 帮你省掉 .value

<template><p>{{ count }}</p>        <!-- 实际读取 count.value --><button @click="count++">+</button> <!-- 实际执行 count.value++ -->
</template>

注意:在 JavaScript 代码 里必须写 .value,模板里可以偷懒。


五、常见误区提醒

错误示例正确写法
let count = ref(0); count = 1count.value = 1
ref(obj).name = 'xxx'const objRef = ref(obj); objRef.value.name = 'xxx'

六、一句话总结

ref() 就是 Vue3 的“魔法盒子”:

  • 包装原始值 → 让它响应式
  • 读取要 .value → 在代码里
  • 模板里省 .value → 语法糖
  • 内部用 Proxy + Dep 列表 → 数据一变,界面立刻刷新。
http://www.dtcms.com/a/333564.html

相关文章:

  • Windows Server存储智能数据校验
  • AMQP协议介绍
  • 【进阶】Java技术栈八股文学习资料整理
  • 优化网络ROI:专线复用,上云出网一“线”牵!
  • 力扣top100(day04-04)--栈
  • 从“写代码”到“定义需求”:AI编程工具如何重构软件开发的核心流程?
  • 深度学习-卷积神经网络-ResNet 残差网络
  • 永磁同步电机控制 第二篇、电机的分类
  • 支持向量机的原理和案例解析
  • Sklearn 机器学习 手写数字识别 使用K近邻算法做分类
  • Android Studio
  • IO流-转换流
  • MySQL的分析查询语句(EXPLAIN):
  • stream流debug
  • 华硕主板怎样调整风扇转速
  • Redis高级优化实战:从键值设计到集群调优
  • [HDCTF 2023]Normal_Rsa(revenge)
  • 晶振电路的负载电容、电阻参数设计
  • 重新定义城市探索!如何用“城市向导”解锁旅行新体验?
  • PID控制算法
  • Pytest 插件使用指南:让你的测试更高效
  • 中级统计师-会计学基础知识-第一章 账户与复试记账
  • @PreAuthorize(“hasPermission(#resourceId, ‘DATA_ASSET‘, ‘read‘)“)无法识别参数
  • 机器学习案例——《红楼梦》文本分析与关键词提取
  • C语言第八章指针五
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • AI智能体在软件测试中的应用与未来趋势
  • 快速了解PCA降维
  • exec函数族、线程
  • termios 线程 poll epoll进化 二叉AVL红黑树