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

Vue3组件传参大全,各种传参方式的对比

在 Vue3 的日常开发中组件间的数据传递与通信是最基本的操作。面对不同的组件关系父子、祖孙、兄弟、任意组件和不同的交互需求单向、双向、共享状态、跨层级透传Vue3 提供了丰富而灵活的传参方案。本文将对 Vue3 中常见的传参方式进行系统梳理对比它们的特性和适用场景帮助你根据实际情况做出最合适的选择。一、父子组件通信1. Props —— 父传子父组件通过自定义属性向子组件传递数据子组件用defineProps声明接收。!-- 父组件 -- Child :titlepageTitle :count10 / !-- 子组件 -- script setup const props defineProps({ title: String, count: Number }) /script template h1{{ props.title }}/h1 /template优点单向数据流清晰可追踪是 Vue 官方推荐的基础传参方式。缺点只能父传子当需要层层传递时中间组件也会被迫接收无关属性。场景绝大部分父组件向直接子组件传递数据的场景。2. Emits —— 子传父子组件通过defineEmits声明事件触发时将数据作为参数回传给父组件。!-- 子组件 -- script setup const emit defineEmits([update, delete]) function handleClick() { emit(update, { id: 1, value: new }) } /script !-- 父组件 -- Child updatehandleUpdate /优点符合单向数据流事件命名清晰易于维护。缺点只能子传父跨多级通信时代码会变冗长。场景子组件通知父组件发生了某个行为并传递附属数据。3. v-model —— 双向绑定Vue3 支持多个v-model绑定本质是prop emit的语法糖。子组件通过defineProps接收modelValue通过defineEmits触发update:modelValue。!-- 父组件 -- CustomInput v-modeltext v-model:visibleshow / !-- 子组件 -- script setup const props defineProps({ modelValue: String, visible: Boolean }) const emit defineEmits([update:modelValue, update:visible]) function updateValue(e) { emit(update:modelValue, e.target.value) } /script优点语义化的双向绑定简洁高效支持多个 v-model 和自定义修饰符。缺点仍是父子通信的延伸不适用于跨层级。场景表单控件、弹窗显隐、任何需要子组件即时同步数据到父组件的场景。4. Ref defineExpose—— 父组件直接访问子组件父组件通过ref获取子组件实例子组件通过defineExpose暴露方法和数据。!-- 父组件 -- script setup import { ref } from vue const childRef ref(null) function focusInput() { childRef.value?.focus() } /script template Child refchildRef / /template !-- 子组件 -- script setup import { ref } from vue const inputRef ref(null) function focus() { inputRef.value?.focus() } defineExpose({ focus }) /script优点父组件可以命令式地调用子组件方法比事件更直接。缺点破坏了组件封装性增加了耦合只能用于父子之间。场景需要父组件集中控制子组件行为如调用子组件内部方法、手动获取表单值等且没有更优雅的声明式替代方案时。二、祖孙 / 跨层级通信5. provide / inject —— 依赖注入祖先组件通过provide提供数据任意后代组件通过inject接收。!-- 祖先组件 -- script setup import { provide, ref } from vue const theme ref(dark) provide(theme, theme) /script !-- 后代组件 -- script setup import { inject } from vue const theme inject(theme, light) // 可设默认值 /script优点任意跨层级传递无需中间组件参与响应式数据依然保持响应。缺点数据来源不够直观依赖注入的 key 可能冲突过度使用会导致组件间关系模糊。场景全局主题、语言、用户信息、表单禁用状态等需要跨层级共享的数据。6. 透传 Attributes ($attrs)父组件传递给子组件、但子组件未声明为 props 的属性会被自动透传到子组件的根元素上。可通过useAttrs()获取这些属性。!-- 父组件 -- Child classbox>三、全局状态管理7. Pinia或 Vuex将共享状态抽离到全局 Store 中任意组件都可以直接读写。// stores/counter.jsimport{defineStore}frompiniaexportconstuseCounterStoredefineStore(counter,(){constcountref(0)functionincrement(){count.value}return{count,increment}})!-- 任意组件 -- script setup import { useCounterStore } from /stores/counter const counter useCounterStore() /script template span{{ counter.count }}/span button clickcounter.increment()/button /template优点真正解耦任意层级、任意关系的组件都能共享数据和逻辑支持 DevTools 调试。缺点引入了额外的库和概念简单场景下可能过于繁重。场景多个组件特别是非父子关系的需要共享同一份状态如用户登录状态、购物车数据、多步骤表单中间数据等。8. 组合式函数Composables共享状态将响应式状态和逻辑抽取到一个组合函数中利用 Vue 的模块单例特性实现共享。// composables/useSharedCount.jsimport{ref}fromvueconstcountref(0)// 模块作用域单例exportfunctionuseSharedCount(){functionincrement(){count.value}return{count,increment}}!-- 任意组件 -- script setup import { useSharedCount } from /composables/useSharedCount const { count, increment } useSharedCount() /script优点比 Pinia 更轻量适合简单共享状态与组合式 API 天然契合。缺点无 DevTools 支持不方便持久化和中间件状态难以被手动清理对服务端渲染需要额外处理。场景简单的跨组件共享如某几个邻近组件的临时状态、无需严格管理的全局变量。四、其他常见传参方式9. 事件总线mitt / tiny-emitterVue3 移除了$on/$off可引入第三方库如mitt实现任意组件间的发布-订阅通信。优点完全不关心组件层级任意组件可触发和监听事件。缺点全局事件容易造成“事件爆炸”难以追踪数据流不利于类型推导组件销毁时需要手动解绑。场景极少组件间的松耦合通信或遗留项目迁移时的过渡方案。新项目不推荐优先使用。10. 路由传参 (Vue Router)通过路由参数、查询参数或状态传递数据。优点可在 URL 上持久化部分状态方便分享和收藏页面间解耦。缺点仅适用于路由跳转场景参数大小受限。场景页面间传递标识符ID、过滤条件等需要从 URL 直接定位的状态。11. 插槽作用域插槽父组件通过作用域插槽接收子组件暴露的数据实现数据回传渲染。!-- 子组件 -- template slot :datalist :loadingisLoading / /template !-- 父组件 -- Child template v-slot{ data, loading } Spinner v-ifloading / List :itemsdata / /template /Child优点将渲染控制权交给父组件但数据仍由子组件提供非常灵活。缺点只适用于父子关系且逻辑偏向 UI 层的组合。场景列表渲染、容器组件的动态布局、任何需要“数据在子组件但渲染方式由父组件决定”的情形。五、传参方式对比总结传参方式方向/范围响应式耦合度适用场景props / emits父↔子✅低标准父子通信单向/事件通知v-model父↔子双向✅低表单输入、组件状态即时同步ref defineExpose父→子✅中父组件命令式控制子组件行为provide / inject祖先→后代✅ (引用)中跨层级共享主题、配置等$attrs父→子透传❌低封装基础组件透传 HTML 属性Pinia / Vuex任意组件✅极低全局状态管理多组件共享复杂状态Composables任意组件✅极低轻量级跨组件共享状态或逻辑事件总线任意组件❌极低极少数松耦合通信不推荐路由传参跨页面❌低页面跳转携带 id、查询参数等作用域插槽子→父数据✅低自定义子组件内容的渲染逻辑六、如何选择没有银弹。实际开发中可以遵循以下准则首选最局部的方式父子通信优先用propsemits需要双向绑定就用v-model避免过早使用全局状态。跨层级但不频繁变动的数据用provide/inject再配合readonly或回调限定修改权限。多组件共享同一业务状态毫不犹豫使用Pinia它的结构化管理和调试能力会省去大量排查时间。封装基础组件时通过useAttrs()和v-bind$attrs透传属性保持灵活性。避免事件总线除非你十分清楚自己在做什么且能将全局事件控制在一个极小范围内。理解每种方式的边界和开销能让你在编写组件时更加游刃有余。Vue3 提供的组合式 API 配合其丰富的通信机制几乎能够优雅地解决所有组件通信难题。

相关文章:

Vue3组件传参大全,各种传参方式的对比

在 Vue3 的日常开发中,组件间的数据传递与通信是最基本的操作。面对不同的组件关系(父子、祖孙、兄弟、任意组件)和不同的交互需求(单向、双向、共享状态、跨层级透传),Vue3 提供了丰富而灵活的传参方案。本…...

oracle logminer

Oracle LogMiner 日志挖掘 【一、LogMiner 核心概念】LogMiner 是 Oracle 内置的日志分析工具,通过解析 redo log / 归档日志, 提取其中的 SQL 变更记录,用于:• 数据审计(谁改了什么、什么时候改的) • 数…...

Kolmogorov-Arnold网络:函数表示论驱动的可解释神经架构

1. 这不是又一个“万能网络”——Kolmogorov-Arnold 网络到底在解决什么真问题?你可能刚在某篇预印本论文里看到“Kolmogorov-Arnold Network”这个名词,心里一咯噔:又来?又是那种名字听着像数学史课件、实操起来连 loss 曲线都跑…...

揭秘开源项目的高效实现:QMC音频文件解密技术深度解析

揭秘开源项目的高效实现:QMC音频文件解密技术深度解析 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经遇到过从QQ音乐下载的音频文件无法在其他播放器…...

Stacking集成在脑瘤影像分类中的临床价值与实操要点

1. 项目概述:为什么 stacking 不是“堆叠玩具”,而是脑瘤分类里最值得细嚼的那块硬骨头在医学影像AI落地的真实战场上,单模型准确率卡在92%就再也上不去,不是因为数据不够多,也不是因为GPU不够猛,而是因为不…...

使用curl命令快速测试Taotoken大模型API的连通性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用curl命令快速测试Taotoken大模型API的连通性 在将大模型能力集成到应用之前,验证API的连通性和基本功能是必不可少…...

MLP分类模型结构设计实战:小样本高维数据的工程化落地

1. 这不是教科书里的“Hello World”,而是一次真实场景下的MLP工程实践你打开任何一本神经网络入门书,第一页大概率写着“用MLP识别手写数字”。但现实里,没人会为MNIST单独搭一个模型——真正卡住你的,是数据不干净、类别不平衡、…...

ViGEmBus虚拟游戏控制器驱动:Windows游戏输入的革命性解决方案

ViGEmBus虚拟游戏控制器驱动:Windows游戏输入的革命性解决方案 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 在Windows游戏世界中,…...

炉石传说佣兵战记自动化脚本:告别重复操作的全能指南

炉石传说佣兵战记自动化脚本:告别重复操作的全能指南 【免费下载链接】lushi_script This script is to save your time from Mercenaries mode of Hearthstone 项目地址: https://gitcode.com/gh_mirrors/lu/lushi_script 还在为《炉石传说》佣兵战记模式中…...

生产级机器学习模型服务:从Notebook到Kubernetes的工程实践

1. 项目概述:这不是“跑通模型”,而是让模型在真实世界里活下来“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句行话暗号,老手一眼就懂:前面三篇已经蹚过了数据清洗、特征工程、…...

博客从 Ubuntu 16.04 迁移到 FreeBSD:成本减半,性能提升超 10 倍!

Bruno Croci 的网站迁移之旅Bruno Croci 正在为 2026 年柏林的开源硬件峰会做准备。他的博客在 Ubuntu 16.04 上运行了 10 年,于 2026 年 5 月 21 日,他将其迁移到了 FreeBSD。迁移动机:旧系统的安全隐患与成本考量这个博客在 Digital Ocean …...

AI赋能“一人公司”创业热潮:机遇背后潜藏哪些风险?

“一人公司”创业范式席卷全国从苏州到深圳,从成都到上海,一种名为OPC(One Person Company,一人公司)的创业范式正以前所未有的速度席卷全国。全国已涌现出超过700个OPC社区,其中,WeOPC平台聚集…...

浏览器AI分身:DOM即接口的智能自动化实践

1. 项目概述:这不是“另一个浏览器插件”,而是一次人机交互范式的迁移你有没有过这样的时刻:早上打开电脑,第一件事是机械地输入邮箱密码、点开日历核对会议、在购物网站比价三款同款耳机、把刚收到的PDF发票拖进记账软件——整套…...

抖音批量下载工具:免费无水印下载完整指南

抖音批量下载工具:免费无水印下载完整指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音批量…...

Generative AI本质与企业落地实战指南

1. 这不是“AI画画”那么简单:Generative AI到底在生成什么、为什么突然爆发、谁该真正关注它Generative AI——这个词过去三年里高频出现在科技媒体、投资人会议、产品经理周报甚至咖啡馆闲聊中,但很多人至今仍把它等同于“用文字生成图片”或“让AI写周…...

FreeACS终极指南:开源TR-069自动配置服务器快速上手教程

FreeACS终极指南:开源TR-069自动配置服务器快速上手教程 【免费下载链接】freeacs Free TR-069 ACS that can run (mostly) anywhere. 项目地址: https://gitcode.com/gh_mirrors/fr/freeacs FreeACS是一款功能强大的开源TR-069自动配置服务器(AC…...

Generative AI落地四层架构与企业级避坑指南

1. 这不是“AI画画”或“AI写文案”——它是一场底层认知范式的迁移Generative AI,这个词现在几乎天天刷屏,但很多人点开一篇介绍,看到的还是“用MidJourney生成海报”“让ChatGPT写周报”这类表层操作。这就像当年第一次听说“互联网”&…...

3分钟掌握MultiHighlight:让代码阅读效率提升300%的智能高亮插件

3分钟掌握MultiHighlight:让代码阅读效率提升300%的智能高亮插件 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors 🎨💡 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight …...

腾讯扔了个王炸:Marvis,每天送你1000万Token的AI管家

昨天,腾讯悄悄上线了一个东西。 没有发布会,没有雷军式的演讲,没有"遥遥领先"的排比句。 就是官网开了,下载链接放出来了。 但我试用了一天之后,想跟你说一句:这可能是我2026年见过最猛的AI产品。 它叫 Marvis(马维斯)。 01 先别急着"又一个AI助手&…...

我测了四款龙虾助手,最慢最傻的,都是最贵的

如果你现在用着某款龙虾助手觉得还行,先别急着点头—— 你可能只是还没用过真正好用的。 01 一个残酷的排行榜 过去几周,我认真用了四款 CLAW 系列的 AI 编程助手,俗称"龙虾助手":qcalw、easycalw、workbuddy、autoclaw。 结果?差距比我预想的大得多。 直接…...

RunPod H100集群实战:64卡AI训练的物理级优化与成本重构

1. 项目概述:当64张H100不再只是大厂的专利,而是一支创业团队的日常训练环境你有没有算过一笔账:在主流公有云上,用8卡H100节点跑一个70B参数模型的全量微调,单次实验成本动辄上万美元?我去年帮一家做金融垂…...

2021年AI落地临界点:视觉生成、代码补全与语音识别的工程化逻辑

1. 项目概述:这不是一份榜单,而是一份“AI技术落地时间表” “ The AI Monthly Top 3 — March 2021 ”——看到这个标题,很多人第一反应是:又一份AI行业资讯汇总?点开就走?但作为连续追踪AI工具演进路径…...

终极指南:如何为Masa Mods全家桶安装中文汉化包,彻底告别英文界面困扰

终极指南:如何为Masa Mods全家桶安装中文汉化包,彻底告别英文界面困扰 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为Masa系列模组的英文界面而烦恼吗&am…...

Mythos模型:通用AI在漏洞挖掘与 exploit 生成中的范式跃迁

1. 这不是一次普通升级:Mythos 的能力跃迁到底意味着什么“Claude Mythos Preview”——这个名字在2026年4月的AI圈里炸开时,我正调试一个用Opus 4.6做代码审计的自动化流水线。看到基准测试数据的第一反应不是兴奋,而是下意识关掉了终端窗口…...

肺部X光AI诊断系统:五分类模型实战与临床可解释性

1. 项目概述:当X光片遇上深度学习——一个肺部疾病AI诊断系统的实操手记 我做医疗影像AI项目快七年了,从最早在医院信息科帮放射科老师写脚本批量重命名DICOM文件,到后来带着学生团队在基层医院部署轻量级肺炎筛查工具,踩过的坑比…...

math 7 [parallel lines] 2026.05.22

math 7 [parallel lines] 2026.05.22 平行线练习...

Unlock Music终极指南:5分钟掌握音乐格式转换的隐藏技巧

Unlock Music终极指南:5分钟掌握音乐格式转换的隐藏技巧 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: htt…...

技术人如何找到自己的“甜蜜点”?一个四象限模型帮你定位

在软件测试这条“越走越深”的路上,每个从业者早晚都会撞上一堵墙——技能焦虑。自动化框架层出不穷,性能工具日新月异,安全左移、精准测试、AI 辅助……每一样看起来都很重要,每一样又都学不完。于是有人拼命考证,有人…...

抖音批量下载工具:3步搞定无水印视频批量保存

抖音批量下载工具:3步搞定无水印视频批量保存 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

从外包到正式编再到技术合伙人,我的10年职业三级跳

2003年的夏天,我从一家三本院校的计算机专业毕业,带着一份勉强过关的成绩单和两个用硬纸板打印的简历,走进了北京上地的一家软件外包公司。我的第一份职位,是连合同甲方都叫不全的“外派测试员”。坐在我旁边的,是和我…...