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

Vue-ref 与 props

一、前言

在 Vue 的组件化开发中,父子组件之间的数据传递 是一个非常核心的需求。常见的场景包括:

  • 父组件向子组件传递数据;
  • 子组件向父组件发送事件或数据;
  • 父组件直接调用子组件的方法或访问其属性。

Vue 提供了多种机制来实现这些通信方式,其中最常用的是:

  • 使用 props 实现 父传子 数据流;
  • 使用 $emit 实现 子传父 事件通知;
  • 使用 ref 实现 父组件对子组件的直接访问与操作

本文将重点讲解 refprops 的使用方式、适用场景以及它们之间的区别与联系,帮助你在不同需求下选择合适的通信策略。

二、什么是 props?

定义:

props 是 Vue 组件之间进行数据传递的一种机制,它允许父组件通过属性的方式向子组件传递数据。

props 是单向数据流,只能由父组件传给子组件,不能反向修改(除非使用 .syncv-model)。

示例:

<!-- ParentComponent.vue -->
<template><div><ChildComponent :message="parentMessage" /></div>
</template><script>
import ChildComponent from './ChildComponent.vue'export default {components: { ChildComponent },data() {return {parentMessage: 'Hello from parent'}}
}
</script>
<!-- ChildComponent.vue -->
<template><div>{{ message }}</div>
</template><script>
export default {props: {message: String}
}
</script>

在这个例子中,父组件通过 :message 向子组件传递了一个字符串值。

三、什么是 ref?

定义:

ref 是 Vue 提供的一个特殊属性,用于在模板中为某个元素或组件注册一个引用标识。通过这个标识,我们可以在 JavaScript 中直接访问该 DOM 元素或组件实例。

⚠️ ref 是一种命令式访问方式,打破了 Vue 的响应式原则,应谨慎使用。

示例:

<!-- ParentComponent.vue -->
<template><div><ChildComponent ref="childRef" /><button @click="callChildMethod">调用子组件方法</button></div>
</template><script>
import ChildComponent from './ChildComponent.vue'export default {components: { ChildComponent },methods: {callChildMethod() {this.$refs.childRef.sayHello()}}
}
</script>
<!-- ChildComponent.vue -->
<template><div>我是子组件</div>
</template><script>
export default {methods: {sayHello() {console.log('Hello from child component')}}
}
</script>

在这个例子中,父组件通过 this.$refs.childRef 直接调用了子组件定义的方法。

四、props vs ref:区别与联系

对比项propsref
类型声明式命令式
数据流向单向(父 → 子)双向(父可访问子)
是否响应式✅ 是❌ 不是(需手动触发)
是否破坏响应式原则是(不推荐滥用)
主要用途传递数据访问子组件方法或属性
推荐程度低(仅必要时使用)

📌 通俗理解:

  • props 是“告诉子组件应该怎么做”;
  • ref 是“我直接帮你做”。

五、何时使用 props?何时使用 ref?

✅ 推荐使用 props 的场景:

  • 父组件需要传递数据给子组件;
  • 子组件根据传入的数据渲染不同的 UI;
  • 保持组件间松耦合,提升可维护性。

✅ 推荐使用 ref 的场景:

  • 父组件需要主动调用子组件的方法(如刷新、提交等);
  • 需要获取子组件的状态(如表单验证结果);
  • 操作 DOM 元素(如聚焦输入框、滚动条控制等);

⚠️ 注意:过度使用 ref 会导致代码难以维护,破坏 Vue 的响应式理念。

六、最佳实践与注意事项

场景推荐做法
父传子数据使用 props
子传父数据使用 $emit
父调用子方法使用 ref
表单验证联动使用 props + watch 或 v-model
避免在子组件中修改 props应使用 $emit 通知父组件修改
避免频繁使用 ref优先使用响应式数据驱动视图更新

七、Vue 3 Composition API 中的 ref 使用

在 Vue 3 的 <script setup> 语法中,使用 ref 更加简洁。

示例:

<script setup>
import { ref } from 'vue'
const childRef = ref()function callChild() {childRef.value.sayHello()
}
</script><template><ChildComponent ref="childRef" /><button @click="callChild">调用子组件方法</button>
</template>

八、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关文章:

Vue-ref 与 props

一、前言 在 Vue 的组件化开发中&#xff0c;父子组件之间的数据传递 是一个非常核心的需求。常见的场景包括&#xff1a; 父组件向子组件传递数据&#xff1b;子组件向父组件发送事件或数据&#xff1b;父组件直接调用子组件的方法或访问其属性。 Vue 提供了多种机制来实现…...

AXURE安装+汉化-Windows

安装网站&#xff1a;https://www.axure.com/release-history/rp9 Axure中文汉化包下载地址 链接:https://pan.baidu.com/s/1U62Azk8lkRPBqWAcrJMFew?pwd5418 提取码:5418 下载完成之后&#xff0c;crtlc lang文件夹 到下载的Axure路径下 双击点进这个目录里面。ctrlv把lan…...

ArcGIS Pro字段计算器与计算几何不可用,显示灰色

“字段计算器”不可用 如果计算字段命令不可用&#xff0c;请考虑以下可能性&#xff1a; 由 ArcGIS 管理的字段无法手动编辑。因此&#xff0c;无法计算 ObjectID&#xff08;OID 或 FID&#xff09;字段或地理数据库要素类的 Shape_Length 和 Shape_Area 字段的字段值。表中…...

mac电脑安装 nvm 报错如何解决

前言 已知&#xff1a;安装nvm成功&#xff1b;终端输入nvm -v 有版本返回 1. 启动全局配置环境变量失败 source ~/.zshrc~ 返回&#xff1a; source: no such file or directory: /Users/你的用户名/.zshrc~2 安装node失败 nvm install 16.13返回&#xff1a; mkdir: /U…...

第11节 Node.js 模块系统

为了让Node.js的文件可以相互调用&#xff0c;Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分&#xff0c;文件和模块是一一对应的。换言之&#xff0c;一个 Node.js 文件就是一个模块&#xff0c;这个文件可能是JavaScript 代码、JSON 或者编译过的…...

上海工作机会:Technical Writer Senior Technical Writer - 中微半导体设备

大名鼎鼎的中微半导体招聘文档工程师了&#xff0c;就是那家由中国半导体产业的领军人物尹志尧领导的、全员持股的公司。如果你还不了解他&#xff0c;赶快Deepseek一下“尹志尧”了解。 招聘职位&#xff1a;Technical Writer & Senior Technical Writer 公司名称&#…...

String 学习总结

1. 存储机制 短字符串优化&#xff08;SSO, Small String Optimization&#xff09; 现代标准库中的字符串实现普遍采用 SSO 技术&#xff0c;将长度较短&#xff08;例如 ≤15 字节&#xff09;的字符串数据直接存储在字符串对象内部的固定缓冲区&#xff08;栈上&#xff09;…...

Python微积分可视化:从导数到积分的交互式教学工具

Python微积分可视化:从导数到积分的交互式教学工具 一、引言 微积分是理解自然科学的基础,但抽象的导数、积分概念常让初学者感到困惑。本文基于Matplotlib开发一套微积分可视化工具,通过动态图像直观展示导数的几何意义、积分的近似计算及跨学科应用,帮助读者建立"数…...

Juce实现Table自定义

Juce实现Table自定义 一.总体展示概及概述 在项目中Juce中TableList往往无法满足用户需求&#xff0c;头部和背景及背景颜色设置以及在Cell中添加自定义按钮&#xff0c;所以需要自己实现自定义TabelList&#xff0c;该示例是展示实现自定义TableList&#xff0c;实现自定义标…...

【25.06】fabric进行caliper测试加环境部署

前置条件 安装一个Ubuntu20+的镜像 基础环境安装 Git cURL vim jq sudo apt install -y git curl vim jq Docker和Docker-compose 这个命令会自动安装docker sudo apt install docker-compose sudo chmod +x /usr/bin/docker-compose docker versiondocker-compose vers…...

【后端高阶面经:架构篇】51、搜索引擎架构与排序算法:面试关键知识点全解析

一、搜索引擎核心基石&#xff1a;倒排索引技术深度解析 &#xff08;一&#xff09;倒排索引的本质与构建流程 倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎实现快速检索的核心数据结构&#xff0c;与传统数据库的正向索引&#xff08;文档→关键词&#xff0…...

Windows应用-音视频捕获

下载“Windows应用-音视频捕获”项目 本应用可以同时捕获4个视频源和4个音频源&#xff0c;可以监视视频源图像&#xff0c;监听音频源&#xff1b;可以将视频源图像写入MP4文件&#xff0c;将音频源写入MP3或WAV文件&#xff1b;还可以录制系统播放的声音。本应用使用MFC对话框…...

【OCCT+ImGUI系列】012-Geom2d_AxisPlacement

Geom2d_AxisPlacement 教学笔记 一、类概述 Geom2d_AxisPlacement 表示二维几何空间中的一个坐标轴&#xff08;轴系&#xff09;&#xff0c;由两部分组成&#xff1a; gp_Pnt2d&#xff1a;原点&#xff08;Location&#xff09;gp_Dir2d&#xff1a;单位方向向量&#xff…...

优化WP外贸建站提升用户体验

WordPress作为一个强大的建站工具&#xff0c;通过合理的优化&#xff0c;可以提升用户体验&#xff0c;吸引更多潜在客户。本文将为您介绍一些优化WordPress外贸建站的实用建议。 1. 响应式设计 随着移动设备的普及&#xff0c;确保您的WordPress网站具有响应式设计变得至关…...

【C++高并发内存池篇】性能卷王养成记:C++ 定长内存池,让内存分配快到飞起!

&#x1f4dd;本篇摘要 在本篇将介绍C定长内存池的概念及实现问题&#xff0c;引入内存池技术&#xff0c;通过实现一个简单的定长内存池部分&#xff0c;体会奥妙所在&#xff0c;进而为之后实现整体的内存池做铺垫&#xff01; &#x1f3e0;欢迎拜访&#x1f3e0;&#xff…...

mac下通过anaconda安装Python

本次分享mac下通过anaconda安装Python、Jupyter Notebook、R。 anaconda安装 点击&#x1f449;https://www.anaconda.com/download&#xff0c; 点击Mac系统安装包&#xff0c; 选择Mac芯片&#xff1a;苹果芯片 or intel芯片&#xff0c; 选择苹果芯片图形界面安装&#x…...

第3篇:数据库路由模块设计与 SQL 路由策略解析

3.1 什么是数据库路由&#xff1f; 在分库分表或多数据库实例架构中&#xff0c;**数据库路由模块&#xff08;SQL Router&#xff09;**的作用是&#xff1a; 将客户端发来的 SQL 请求路由到正确的后端数据库实例或分片表中执行。 它是数据库中间件的核心组件之一。 3.2 数据…...

ARINC818编解码设计FPGA实现

一、设计内容 1.基于xilinx平台进行系列产品设计 2.基于GT高速进行进行设计 3.提供良好的技术支持和售后服务 4.比较详细的代码注释 二、模块设计内容 1.模块顶层设计 2.编码模块部分设计 内容包括&#xff1a; 帧信息产生/ojbect0帧格式产生和发送/object2_object3帧格式产生…...

微软PowerBI考试 PL300-Power BI 入门

Power BI 入门 上篇更新了微软PowerBI考试 PL-300学习指南&#xff0c;今天分享PowerBI入门学习内容。 简介 Microsoft Power BI 是一个完整的报表解决方案&#xff0c;通过开发工具和联机平台提供数据准备、数据可视化、分发和管理。 Power BI 可以从使用单个数据源的简单…...

逻辑回归知识点

一、逻辑回归概念 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的统计方法&#xff0c;尤其适用于二分类问题。 注意: 尽管名称中有"回归"二字&#xff0c;但它实际上是一种分类算法。 解决二分类的问题。 API&#xff1a;sklearn.linear_model.Logis…...

YARN架构解析:大数据资源管理核心

一、YARN的设计目标​​ ​​解耦资源管理与作业调度​​&#xff1a;将资源管理&#xff08;Resource Management&#xff09;和任务执行&#xff08;Task Execution&#xff09;分离&#xff0c;提升集群资源利用率。​​支持多种计算框架​​&#xff1a;不再局限于MapRedu…...

嵌入式学习笔记 - freeRTOS在程序开始在任务内创建任务的好处是什么

在FreeRTOS中&#xff0c;程序启动后优先在初始任务&#xff08;而非main()函数&#xff09;内创建其他任务是一种常见且推荐的设计模式&#xff0c;其主要优势包括以下几点&#xff1a; 以下来自deepseek的回答&#xff0c;很全面很正确&#xff1a; &#x1f527; 1. ‌避免…...

Ubuntu22.04 安装 CUDA12.8

1.下载CUDA 由于我装完 Ubuntu22.04 后就自动带了最新的显卡驱动&#xff0c;就没有再去配置驱动。 先查看驱动能支持的CUDA最高版本&#xff0c;这里显示可支持到12.8。 nvidia-smi在CUDA的 说明文档 可查看CUDA对应的驱动版本要求。 在 CUDA Toolkit Archive 查找需要的 …...

Android的uid~package~pid的关系

UID &#xff1a; Linux 系统级用户标识&#xff0c;Android 中每个应用安装时分配唯一 UID&#xff08;如 1000&#xff09;。 Package&#xff1a; Android 应用包名(例如android)&#xff0c;一个 UID 可关联多个 Package&#xff08;共享 UID 场景如android:sharedUserI…...

线段树刷题记录

一篇讲解很好的线段树博客&#xff1a;数据结构--线段树篇_数据结构线段树-CSDN博客 一、区间查询 无修改&#xff1a; &#xff08;一&#xff09;最值问题&#xff1a; 1.P1816 忠诚 - 洛谷 思路&#xff1a; 模板。 注意&#xff1a; 无。 代码&#xff1a; #include …...

20250530-C#知识:万物之父Object

C#知识&#xff1a;万物之父Object Object类&#xff08;即object&#xff09;是所有类的基类&#xff0c;这里面的方法还是需要好好了解一下。 1、Object类 是顶级父类&#xff0c;其他类默认都是Object类的子类&#xff08;自定义类也会默认继承Object类&#xff09;可以用O…...

多元素纳米颗粒:开启能源催化新纪元

在能源转型的浪潮中&#xff0c;纳米催化剂正成为推动能源技术突破的关键力量。多元素纳米颗粒&#xff08;Polyelemental Nanoparticles&#xff09;凭借其独特的元素协同效应&#xff0c;展现出在能源催化领域的巨大潜力。然而&#xff0c;合成这些复杂体系的纳米颗粒面临着诸…...

分布式锁优化:使用Lua脚本保证释放锁的原子性问题

分布式锁优化&#xff08;二&#xff09;&#xff1a;使用Lua脚本保证释放锁的原子性问题 &#x1f4bb;黑马视频链接&#xff1a;Lua脚本解决多条命令原子性问题 在上一章节视频实现了一个可用的Redis分布式锁&#xff0c;采用SET NX EX命令实现互斥和过期自动释放机制&…...

电脑wifi显示已禁用怎么点都无法启用

一、重启路由器与电脑 有时候&#xff0c;简单的重启可以解决很多小故障。试着先断开电源让路由器休息一会儿再接通&#xff1b;对于电脑&#xff0c;则可选择重启系统看看情况是否有改善。 二、检查驱动程序 无线网卡驱动程序的问题也是导致WiFi无法启用的常见原因之一。我…...

【FPGA开发】Ubuntu16.04环境下配置Vivado2018.3—附软件包

文章目录 环境介绍关键步骤记录安装虚拟机及镜像安装vivadolicense导入 环境介绍 vivado&#xff1a;2018.3 虚拟机&#xff1a;vmware 16 pro 镜像&#xff1a;Ubuntu16.04 64位 所有相关软件压缩包&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/fd2730b46b20 提取码…...