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

Vue3组件通讯六种方式

1. Props

Props 是 Vue.js 中最基本的组件通信方式之一,用于父组件向子组件传递数据。Props 是一种单向数据流,即父组件通过 props 将数据传递给子组件,子组件接收这些 props 并在内部使用它们,但不能直接修改它们。在 Vue3 中,可以使用 defineProps 宏来声明 props。

2. Emits

Emits 用于子组件向父组件发送消息或触发事件,并可以传递数据。在 Vue3 的 <script setup> 语法中,可以使用 defineEmits 宏来声明子组件可以触发的事件。父组件通过监听这些事件并定义相应的方法来接收子组件传递的数据。

3. Provide / Inject

Provide / Inject 是 Vue3 中新增的一种组件通信方式,用于实现跨层级的组件通信,即祖先组件向后代组件传递数据,而无需逐层传递 props。Provide 是在祖先组件中使用的,通过 provide 方法可以向子孙组件提供数据;Inject 是在后代组件中使用的,通过 inject 方法可以获取祖先组件提供的数据。

4. Pinia

Pinia 是 Vue 的状态管理库,用于集中化管理全局状态。它简化了 Vuex 的复杂性,并提供了更简洁的 API。Pinia 通过 state、getters 和 actions 来管理状态,其中 state 用于存储数据,getters 用于获取和过滤数据,actions 用于修改 state。Pinia 使得跨组件共享状态变得更加容易和高效。

5. attrs和listeners(在 Vue 3 中已合并到 $attrs)

在 Vue 2 中,$attrs 包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高阶组件时非常有用。而在 Vue 3 中,$listeners 已经被移除,所有的监听器都包含在了 $attrs 对象中。

6. $refs

$refs 是一种用于直接访问 DOM 元素或子组件实例的方式。通过在模板中给元素或子组件添加 ref 属性,并在组件的 setup 函数或 methods 中通过 this.$refs(在 <script setup> 中是 ref 变量本身)访问对应的 DOM 元素或子组件实例。这可以用于父组件直接调用子组件的方法或访问子组件的数据。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 进程终止 等待 替换
  • 2024了,Neo4j能显示节点图片吗?
  • [深度学习] 时间序列分析工具TSLiB库使用指北
  • 【二叉树】OJ题目
  • Android 架构模式之 MVVM
  • AWS CodeCommit 停服,欢迎大家使用极狐GitLab!
  • Scrapy入门学习
  • Windows IPv6漏洞CVE-2024-38063
  • spring boot 集成es使用
  • (十三)Flink SQL
  • 海南省政协主席李荣灿调研宇乐乐影业
  • 如何使用 Java 将 JSON 数据转换为 YAML 文件
  • python并发与并行(四) ———— 用queue来协调多个线程之间的工作进度
  • 【Qt】基于VTK9.1+VS2019+Qt5.15.2的点云可视化程序开发
  • 【C++ Primer Plus习题】6.9
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • EventListener原理
  • leetcode46 Permutation 排列组合
  • Python学习笔记 字符串拼接
  • Spring Cloud Feign的两种使用姿势
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 后端_MYSQL
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 悄悄地说一个bug
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过git安装npm私有模块
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​学习一下,什么是预包装食品?​
  • #162 (Div. 2)
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #数据结构 笔记一
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Java入门)抽象类,接口,内部类
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (备份) esp32 GPIO
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (分布式缓存)Redis哨兵
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (附源码)计算机毕业设计大学生兼职系统
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (十八)Flink CEP 详解
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (小白学Java)Java简介和基本配置
  • (转)EOS中账户、钱包和密钥的关系
  • (转)IOS中获取各种文件的目录路径的方法
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET 8.0 中有哪些新的变化?
  • .NET CORE Aws S3 使用