news 2026/10/8 13:08:39

理解vue中的ref

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
理解vue中的ref

前端代码

<template><divclass="container"><button @click="fetchDataFromBackend">获取后端信息</button><divclass="display-box"><p>返回的消息:{{info}}</p></div></div></template><script setup>import{ref}from'vue';importaxios from'axios';//1. 定义响应式变量,用于绑定文字框 const info=ref('点击按钮获取内容...');//2. 编写请求函数 const fetchDataFromBackend=async()=>{try{// 像后端接口发送 GET 请求 const response=await axios.get('http://127.0.0.1:8000/api/data');//3. 将返回的数据赋值给响应式变量,页面会自动更新 info.value=response.data.message;}catch(error){console.error("请求失败:", error);info.value="无法连接到后端服务器";}};</script>

在上面的VUE的示例代码中,有一个info变量。继承自ref。
上面的代码其实是分了两部分,一部分是上面的VUE前端代码,一部分是下面的JS代码。
这里的ref在 JavaScript 中不是一个普通的字典(Object),而是一个“响应式代理对象”。因此不能直接用python中的字典类型去套。

这是一个非常棒的观察!对于刚从 Python(FastAPI)转到 Vue 3 的开发者来说,这确实是一个容易混淆的地方。

简单来说:info在 JavaScript 中不是一个普通的字典(Object),而是一个“响应式代理对象”。


1. 什么是ref对象?

当你使用const info = ref('...')时,Vue 会把你的原始数据(字符串、数字或对象)包装在一个特殊的RefImpl(Ref 实现)对象中。

这个对象主要包含以下几个关键部分:

字段名作用
.value最核心的字段。存储你真正的原始值。Vue 拦截了对这个字段的访问和修改,从而实现“数据变了,页面跟着变”。
__v_isRef一个标识符,Vue 用它来判断这个变量是不是由ref创建的。
dep内部使用的依赖收集器,用来记录哪些组件正在使用这个变量,以便更新。

一句话总结:info本身是一个“盒子”,.value才是盒子里装的东西。在<script>中你需要手动开盒(.value),但在<template>模板中,Vue 会帮你自动开盒。


2. 案例对比:Python 字典 vs Vue Ref

为了方便理解,我们可以对比一下两者的操作逻辑:

在 Python (FastAPI) 中

数据是静态的。

# 这是一个真正的字典user_info={"message":"Hello"}print(user_info["message"])# 直接访问键

在 Vue 3 中

数据是响应式的。

// info 不是字典,而是一个被 Vue 监控的“盒子”constinfo=ref("Hello");// 修改数据info.value="World";// 背后发生的事情:// 1. 你修改了 value// 2. info 内部的监听器触发// 3. Vue 通知浏览器:“嘿!页面上用到 info 的地方都要重画一下!”

3. 为什么不直接用普通变量?

如果你在 Vue 里直接写let info = "Hello",当你修改这个变量时,网页上的文字是不会变的。

案例演示:

  • 普通变量:你改了变量,页面像死水一样没反应。
  • ref变量:你改了.value,页面上的文字会瞬间“跳”成新的内容。

4. 特殊情况:如果 ref 里面装的是对象

如果你用ref装了一个对象,你会发现需要写“两层”:

constuser=ref({name:'张三',age:25});// 访问名字:console.log(user.value.name);// 第一层 .value 进盒子,第二层 .name 访问字典键

💡 避坑小贴士

在 Vue 3 开发中,最常见的报错就是:“忘了写.value”。

  • 如果你发现打印info出来是一堆奇奇怪怪的对象(包含dep,__v_isRef等),那说明你忘了加.value。
  • 但在 HTML 模板<template>里面,绝对不要写.value,Vue 会自动处理。

划重点,在vue的template中,绝对不要写.value,因为ref本身就是VUE自己定义的对象,VUE会自己识别里面的内容并做处理,会自动“开盒”。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 9:41:13

zview3.1安装教程

软件介绍 Zview是一款专业的阻抗分析软件&#xff0c;适用于物理、化学、材料科学等领域。它由美国Scribner Associates Inc.公司开发&#xff0c;可在Windows系统运行。 该软件支持多种阻抗数据格式&#xff0c;能导入电化学阻抗谱数据&#xff0c;提供电阻、电容等多种拟合模…

作者头像 李华
网站建设 2026/10/8 12:50:46

别等度数涨了才后悔!居家就能做的近视防控

相信很多家长都有这样的经历&#xff1a;明明已经严格控制了孩子看手机、平板的时间&#xff0c;每天也督促孩子做眼保健操&#xff0c;可孩子的近视度数还是挡不住地涨。这到底是哪里出了问题&#xff1f;其实家长们忽略了一个关键问题&#xff0c;孩子居家期间的近距离用眼&a…

作者头像 李华
网站建设 2026/10/3 23:47:13

低代码赋能办公用品管理:高效破解企业管理困境

在企业数字化转型的浪潮中&#xff0c;办公用品管理作为后勤保障的核心环节&#xff0c;往往因流程繁琐、数据割裂等问题成为效率瓶颈。尤其随着企业规模扩大&#xff0c;传统手工管理模式的弊端愈发凸显。基于FURION低代码平台&#xff0c;我们打造了一站式办公用品管理系统解…

作者头像 李华
网站建设 2026/10/6 6:50:36

会话超时手动测试核心步骤与风险防控

一、测试目标 验证系统在预设无操作周期后能否准确终止会话&#xff0c;检查数据安全性、用户体验及异常处理能力。 二、测试准备阶段 环境配置 搭建与生产环境一致的测试环境&#xff08;含数据库、中间件版本&#xff09; 关闭自动化会话刷新工具 参数确认 - 超时阈值&a…

作者头像 李华
网站建设 2026/10/6 15:24:07

无人机飞行姿态稳不稳?关键看这个MEMS IMU

惯性测量单元&#xff08;IMU&#xff09;是无人机飞控系统的核心感知部件&#xff0c;也是无人机实现稳定飞行、姿态控制与自主导航的基础硬件。无人机依靠 IMU 实时感知自身的运动与姿态状态&#xff0c;再由飞控算法快速输出控制指令&#xff0c;驱动电机与旋翼调整姿态&…

作者头像 李华
网站建设 2026/10/8 2:43:08

机器学习 —— 关联规则

摘要&#xff1a;关联规则挖掘是机器学习中用于发现数据集中项目间关联关系的技术&#xff0c;主要应用于购物篮分析等领域。该方法通过支持度和置信度指标衡量规则强度&#xff0c;其中支持度反映规则普遍性&#xff0c;置信度表示规则可靠性。使用Python的mlxtend库可实现关联…

作者头像 李华