vue3中的useAttrs和props的区别解析

 更新时间:2023年09月02日 11:32:10   作者:A黄俊辉A  
在vue3中, 提供了一个 useAttrs 的方法它接收到的参数一 prop中可以接收到的数据是基本一样的如果我们想自已写一个组件, 把 elementPlus 中的期中一个组件封装一下,这篇文章主要介绍了vue3中的useAttrs和props的区别,需要的朋友可以参考下

vue3中的useAttrs和props的区别

在vue3中, 提供了一个 useAttrs 的方法它接收到的参数一 prop中可以接收到的数据是基本一样的如果我们想自已写一个组件, 把 elementPlus 中的期中一个组件封装一下。可以这样做

1.新建一个 自定义组件 myBtnCom

<template>
  <div class="mybuttonwrapper">
    <el-button :="$attrs">Success</el-button>
  </div>
</template>
<script setup>
</script>

从上面的代码中, 我们可以在代码中直接使用 $attrs 来接收所有的属性也可以使用 useAttrs 函数import { useAttrs } from “vue”;let $attrs = useAttrs();

父组件中

<template>
  <div class="home-wrapper">Home</div>
  <el-button type="success" color="hotpink"  round @click="changeSuccess">{{suctext}}</el-button>
  <myBtnCom  type="success" color="hotpink" round></myBtnCom>
</template>

在myBtnCom 设置的属性和 elementPlus中的button的属性是一样的, 传到组件内部 ,就可以封装一个和 elementPlus 用法一样的组件了注意: 我们可以使用 useAttrs 接收到组件中传递的属性, 同样我们也可以使用 defineProps来接收, 但是如果我们使用 defineProps 接收过的属性, 会要useAttrs 中消失, 这个特性要注意一下

补充:vue props和attrs

vue3

props 要先声明才能取值,attrs不用声明直接使用($attrs 包含 class and style attribute)

props 不包含事件,attrs包含

props 支持 String 以外的类型,attrs只有 String 类型

props 没有声明的属性,会在 attrs 里,若在 props 内声明了该属性,那么 attrs 里就不会出现该属性

vue2与vue3的不同

包含所有父作用域的绑定 (class 和 style 除外)

props 不包含事件,attrs也不包含,事件通过$listeners监听

补充:

vue2官方

$attrs:

包含了父作用域中不作为 prop 被识别 (且获取) 的 attribute 绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定 (class 和 style 除外),并且可以通过 v-bind="$attrs" 传入内部组件——在创建高级别的组件时非常有用。

$listeners

包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件——在创建更高层次的组件时非常有用。

vue3

$listeners 被移除或整合到 $attrs

$attrs 现在包含 class and style attribute

到此这篇关于vue3中的useAttrs和props的区别的文章就介绍到这了,更多相关vue3 useAttrs和props区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中的双向数据绑定原理与常见操作技巧详解

    vue中的双向数据绑定原理与常见操作技巧详解

    这篇文章主要介绍了vue中的双向数据绑定原理与常见操作技巧,结合实例形式详细分析了vue中双向数据绑定的概念、原理、常见操作技巧与相关注意事项,需要的朋友可以参考下
    2020-03-03
  • 使用 vue-i18n 切换中英文效果

    使用 vue-i18n 切换中英文效果

    这篇文章主要介绍了使用 vue-i18n 切换中英文效果,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-05-05
  • 如何本地运行vue dist文件

    如何本地运行vue dist文件

    这篇文章主要介绍了如何本地运行vue dist文件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案

    Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案

    今天很郁闷,遇到这样一个奇葩问题,使用webpack打包vue后,将打包好的文件,发布到Tomcat上,访问成功,但是刷新后页面报404错误,折腾半天才解决好,下面小编把Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案分享给大家,需要的朋友一起看看吧
    2018-05-05
  • 3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用

    3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用

    这篇文章主要介绍了3分钟搞定vite项目(vue/react)使用vite-plugin-pwa配置为pwa应用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-02-02
  • vue3 ref如何获取标签dom

    vue3 ref如何获取标签dom

    这篇文章主要介绍了vue3 ref如何获取标签dom问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 解决error Couldn‘t find a package.json file in报错的问题

    解决error Couldn‘t find a package.json file in报错的问题

    文章介绍了npm依赖包缓存导致重复下载的问题,提供了删除node_modules、清除缓存或重启项目的解决方法,并附带了查看npm缓存位置的命令
    2026-03-03
  • 一文详解Vue 的双端 diff 算法

    一文详解Vue 的双端 diff 算法

    这篇文章主要介绍了一文详解Vue 的双端 diff 算法,diff 算法是渲染器中最复杂的部分,也是面试的热点问题。今天我们就通过 Vue 的 diff 算法来探究下diff 算法吧
    2022-06-06
  • 解决vue单页面修改样式无法覆盖问题

    解决vue单页面修改样式无法覆盖问题

    这篇文章主要介绍了vue单页面修改样式无法覆盖问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 使用Vue3的watch实现数据的实时更新(附详细代码)

    使用Vue3的watch实现数据的实时更新(附详细代码)

    vue.js是一个轻量级的前端框架,你可以使用它来实现数据实时刷新,下面这篇文章主要介绍了使用Vue3的watch实现数据的实时更新的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-08-08

最新评论