vue3中$attrs与inheritAttrs的使用

Vue 3 引入了一些新特性和改进,其中之一就是对 $attrs 的处理方式。在 Vue 2 中,$attrs 包含了父组件传递给子组件的属性,但不包括子组件已经声明的 props。在 Vue 3 中,$attrs 的行为有所变化:

  1. 默认情况下,$attrs 包含所有未被子组件的 props 声明的属性。也就是说,如果父组件传递了多个属性给子组件,即使子组件只声明了其中的一部分作为 props,$attrs 也会包含所有未声明的属性。
<!-- 父组件 -->
<template><MyComponent custom-prop="value" other-attr="otherValue" />
</template>
<!-- 子组件 -->
<template><div>Custom prop: {{ customProp }}</div><!-- $attrs 包含 other-attr="otherValue" -->
</template><script setup>
import { defineProps } from 'vue';const props = defineProps({customProp: String
});
</script>
  1. vue3中 $attrs 包含了事件监听器。在 Vue 2 中,事件监听器不会包含在 $attrs 中。但在 Vue 3 中,如果父组件传递了事件监听器给子组件,这些监听器也会包含在 $attrs 中。
<!-- 父组件 -->
<template><MyComponent @custom-event="handleCustomEvent" />
</template><script setup>
const handleCustomEvent() {console.log('Custom event triggered');
} 
</script>
<!-- 子组件 -->
<template><button @click="$attrs.onClick">Trigger Event</button><!-- $attrs 包含 @custom-event="handleCustomEvent" -->
</template><script setup>
import { useAttrs } from 'vue';const attrs = useAttrs();
</script>
  1. vue3中 $attrs 是一个响应式对象。在 Vue 2 中,$attrs 是一个静态对象,不会随着父组件属性的变化而更新。但在 Vue 3 中,$attrs 是响应式的,如果父组件的属性发生变化,$attrs 也会相应地更新。
<!-- 父组件 -->
<template><div><button @click="toggleAttr">Toggle attr</button><MyComponent :dynamic-attr="dynamicAttr" /></div>
</template><script setup>
import { ref } from 'vue';const dynamicAttr = ref('initial');function toggleAttr() {dynamicAttr.value = dynamicAttr.value === 'initial' ? 'updated' : 'initial';
}
</script>
<!-- 子组件 -->
<template><div>Dynamic attr: {{ attrs.dynamicAttr }}</div>
</template><script setup>
import { useAttrs } from 'vue';const attrs = useAttrs();
</script>
  1. vue3中 $listeners 已被删除合并到$attrs。在 Vue 2 中,$listeners 包含了父组件传递给子组件的所有事件监听器。但在 Vue 3 中,$listeners 被移除,所有的属性和事件监听器都包含在 $attrs 中。
<!-- 子组件 -->
<template><button v-on="attrs">Click me</button><!-- 所有事件监听器都会应用到这个按钮上 -->
</template><script setup>
import { useAttrs } from 'vue';const attrs = useAttrs();
</script>
  1. inheritAttrs 选项。在 Vue 2 中,inheritAttrs 是一个布尔值,用于控制是否将 $attrs 中的属性自动应用到子组件的根元素上。在 Vue 3 中,inheritAttrs 仍然是一个选项,但它现在默认为 false,这意味着属性不会自动应用,除非你明确地使用它们。
<!-- 子组件 -->
<template><div v-bind="$attrs"><!-- 属性将应用到这个div上 --></div>
</template><script setup>
import { defineProps, withDefaults } from 'vue';const props = withDefaults(defineProps({}), {});
</script>
  1. v-on="$attrs" 用法。在 Vue 3 中,你可以使用 v-on="$attrs" 将所有的事件监听器应用到一个元素上。
<!-- 子组件 -->
<template><button v-on="$attrs">Click me</button><!-- 所有事件监听器都会应用到这个按钮上 -->
</template><script setup>
// 无需额外的脚本,直接使用$attrs即可
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/25818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14. RTCP 协议

RTCP 协议概述 RTCP&#xff08;Real-time Transport Control Protocol 或 RTP Control Protocol 或简写 RTCP&#xff09;&#xff0c;实时传输控制协议&#xff0c;是实时传输协议&#xff08;RTP&#xff09;的一个姐妹协议。 注&#xff1a;RTP 协议和 RTP 控制协议&#…

Postgresql源码(135)生成执行计划——Var的调整set_plan_references

1 总结 set_plan_references主要有两个功能&#xff1a; 拉平&#xff1a;生成拉平后的RTE列表&#xff08;add_rtes_to_flat_rtable&#xff09;。调整&#xff1a;调整前每一层计划中varno的引用都是相对于本层RTE的偏移量。放在一个整体计划后&#xff0c;需要指向一个统一…

Material-UI create-react-app 创建移动端 H5

当使用 create-react-app 和 Material-UI 来创建移动端 H5 页面时,你需要考虑几个关键点来确保页面在移动设备上表现良好。以下是一些步骤和最佳实践: 创建 React 项目 使用 create-react-app 快速创建一个新的 React 项目: npx create-react-app my-mobile-app cd my-mobil…

京东一面测开(KPI)

京东一面测开凉经&#xff08;笔试ak&#xff09; 3.8 面试官&#xff1a;你很优秀啊&#xff0c;你不用谦虚 没问技术相关&#xff0c;问了如何设计测试用例步骤一些理论&#xff1a; 什么是软件测试&#xff1f;其目的是什么&#xff1f; 软件测试有哪些类型&#xff1f;请列…

架构设计-全局异常处理器404、405的问题

java web 项目中经常会遇到异常处理的问题&#xff0c;普遍的做法是使用全局异常处理&#xff0c;这样做有以下几种原因&#xff1a; 集中化处理&#xff1a;全局异常处理允许你在一个集中的地方处理整个应用程序中的异常。这有助于减少代码重复&#xff0c;因为你不必在每个可…

GCROOT节点有哪些?

GCROOT节点在Java虚拟机中扮演着判断对象是否存活的起点角色。它们主要包括以下几种类型&#xff1a; 虚拟机栈中引用的对象&#xff1a; 这通常指的是各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。这些对象在虚拟机栈中被直接引用&#xff0c;因此它们及其…

项目方案:社会视频资源整合接入汇聚系统解决方案(五)

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

QT项目实战: 五子棋小游戏

目录 内容介绍 一.添加头文件 二.画棋盘 1.宏定义 2.棋盘 三.画棋子 四.获取棋子摆放位置 五.判断棋子存在 六.判断胜利 1.变量定义和初始化 2.检查获胜条件 3.游戏结束处理 七.重绘 八.效果展示 九.代码 1.mainwindow.h 2.mainwindow.cpp 3.chessitem.h 4…

HTML 中使用 JavaScript 的具体方式

文章目录 一、JavaScript 脚本添加方式1.1 内联 JavaScript1.2 内嵌 JavaScript1.3 外部引用 JavaScript 二、外部引用 JavaScript 的注意事项 一、JavaScript 脚本添加方式 在 HTML 文件中使用 JavaScript 代码主要由以下三种方法&#xff1a; 内联内嵌外部引用 1.1 内联 J…

【python】在【机器学习】与【数据挖掘】中的应用:从基础到【AI大模型】

目录 &#x1f497;一、Python在数据挖掘中的应用&#x1f495; &#x1f496;1.1 数据预处理&#x1f49e; &#x1f496;1.2 特征工程&#x1f495; &#x1f497;二、Python在机器学习中的应用&#x1f495; &#x1f496;2.1 监督学习&#x1f49e; &#x1f496;2.2…

【MySQL】(基础篇七) —— 通配符和正则表达式

通配符和正则表达式 本章介绍什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索&#xff0c;以便对数据进行复杂过滤&#xff1b;如何使用正则表达式来更好地控制数据过滤。 目录 通配符和正则表达式LIKE操作符百分号(%)通配符下划线(_)通配符 通配符使用技巧正…

深入理解 C++ 智能指针

文章目录 一、引言二、 原始指针的问题1、原始指针的问题2、智能指针如何解决这些问题 三、智能指针的类型四、std::shared_ptr1、shared_ptr使用2、shared_ptr的使用注意事项3、定制删除器4、shared_ptr的优缺点5、shared_ptr的模拟实现 五、std::unique_ptr1、unique_ptr的使…

SpringSecurity入门(三)

12、密码加密 12.1、不指定具体加密方式&#xff0c;通过DelegatingPasswordEncoder&#xff0c;根据前缀自动选择 PasswordEncoder passwordEncoder PasswordEncoderFactories.createDelegatingPasswordEncoder();12.2、指定具体加密方式 // Create an encoder with streng…

Java中的CAS无锁并发原理是怎样的

CAS&#xff08;Compare And Swap&#xff09;即比较并交换&#xff0c;是一种无锁并发算法的核心原理。 简单来说&#xff0c;CAS 原理通过以下三个步骤来实现&#xff1a; 1. 读取当前值&#xff1a;获取目标变量当前的值。 2. 比较预期值&#xff1a;将读取到的值与预…

逆运动学IK原理举例说明

逆运动学IK原理举例说明 逆运动学(Inverse Kinematics, IK)是计算机器人各个关节的位置和角度,使机器人末端(如手或脚)达到目标位置的过程。IK 是机器人学中的一个重要问题,因为它允许我们从任务空间(如末端执行器的位置和姿态)控制机器人关节空间(如关节角度)。 逆…

【iOS】UI学习——登陆界面案例、照片墙案例

文章目录 登陆界面案例照片墙案例 登陆界面案例 这里通过一个登陆界面来复习一下前面学习的内容。 先在接口部分定义两个UILabel、两个UITextField、两个UIButton按键&#xff1a; #import <UIKit/UIKit.h>interface ViewController : UIViewController {UILabel* _lb…

2024050501-重学 Java 设计模式《实战命令模式》

重学 Java 设计模式&#xff1a;实战命令模式「模拟高档餐厅八大菜系&#xff0c;小二点单厨师烹饪场景」 一、前言 持之以恒的重要性 初学编程往往都很懵&#xff0c;几乎在学习的过程中会遇到各种各样的问题&#xff0c;哪怕别人那运行好好的代码&#xff0c;但你照着写完…

深入解析分布式链路追踪:原理、技术及应用

目录 分布式链路追踪简介分布式链路追踪的基本概念 Span 和 Trace上下文传播采样策略 分布式链路追踪的工作原理常见的分布式链路追踪系统 ZipkinJaegerOpenTelemetry 分布式链路追踪的技术实现 数据收集数据传输数据存储数据展示 分布式链路追踪的应用场景 性能优化故障排除依…

适配Android12启动页

今天我们讲个什么话题呢&#xff1f;我们今天讲的内容是&#xff0c;Android12新启动页的支持API。 启动页我想大家都不陌生吧&#xff0c;通常的写法就是先创建一个SplashActivity&#xff0c;在onCreate中 Handler(Looper.getMainLooper()).postDelayed({// 在这里跳转主界…

人月神话珍藏版系列文章二---人月神话

前言: 在众多软件项目中,缺乏合理的进度安排是造成项目滞后的最主要的原因,它比其他所有因素加起来的影响还要大。软件项目的进度安排不合理普遍发生的原因是什么呢? 第一,在实际的工作当中,估算技术还不够成熟,说的更加的严重些,它们反映的是一个很不真实的假设,一切…