一文搞懂vue的$attrs和$listeners,和react props的对比后更容易记忆

2023-11-04

近期编写vue组件,用到vue新增的api$attrs和$listeners,看了网上很多帖子,感觉介绍的都不直观,并不能让使用者快速了解二者到底是什么作用,本文结合实际使用场景,给出$attrs和$listeners的使用方法。并且引入引深思考,和react props传递进行对比。

首先介绍$attrs

作用:主要用于跨组件传输props,中间组件使用v-bind = "$attrs"转发,具体有以下两点

1,接收为在props中定义的额外的props

created(){
  console.log(this.$attrs)//打印出父组件传递的props
},
props:{
  props1:{} //由于这里指明接受了props1属性,this.$attrs不再包括props1
}

说明:1,this.$attrs是父组件传递的props属性,但是在当前的组件,props中指明了的属性,this.$attrs不再包含
     2,this.$attrs不包括class, style

2,传递props,实现props属性跨组件传递

//代码仅作为演示
<ComponentA
  name = "我是根组件"
>
</ComponentA>

//A组件中使用了B组件

<template>
    <ComponentB
        v-bind = "$attrs"
    >

    </ComponentB>
</template>

//B组件中使用了C组件
<template>
    <ComponentC
        
    >
        <div>{{$attrs.name}}</div> 
    </ComponentC>
</template>

2,inheritAttrs的作用

网上很多帖子把inheritAttrs和$attrs一块讲,其实二者没有关系,设置inheritAttrs为treu或者false对this.$attrs没有影响

1, inheritAttrs: false

当前组件未被注册使用的属性不会作为普通和html属性渲染

2,inheritAttrs: true

当前组件未被注册使用的属性会作为普通和html属性渲染

设置inheritAttrs false的意义在于是的属性的传输不至于模糊混乱,只渲染用到的属性

3,$listeners

场景:和$attrs类似,主要是从根组件向下传递事件,可以跨组件传递

//代码仅作为演示
<ComponentA
  name = "我是根组件"
  @click = 'componentAClick'
>
</ComponentA>

//A组件中使用了B组件

<template>
    <ComponentB
        v-bind = "$attrs"
        v-on = "$listeners"
    >

    </ComponentB>
</template>

//B组件中使用了C组件
<template>
    <ComponentC
        
    >
        <div>{{$attrs.name}}</div> 
        <button
          @click="$listeners.click" 
        ></button>
    </ComponentC>
</template>

4,和react props的对比

在react中传递props,如果一层一层传递,只需要使用 <Component {...props}></Component>

在vue中相当于把属性和事件做了区分:

属性使用$attrs向下传递

事件使用$listeners向下传递

总结:对于vue的$attrs,$listeners主要用于跨组件属性和事件的传递,相当于在组件中加了一层数据model的转发类似于react的{...props}

有更好的欢迎交流

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文搞懂vue的$attrs和$listeners,和react props的对比后更容易记忆 的相关文章

随机推荐

  • QCQI学习笔记(1)

    Chapter I II overview of the quantum information probabilistic model qubit tensor product dirac notation Chapter III Sup
  • electron-上传文件,下载csv txt xlsx

    electron 主进程 渲染进程 在vue中调用接口 相互通信 csv txt 上传csv文件 将csv文件读取内容 iconv lite 解决读取内容乱码 xlsx 上传xlsx文件 xlsx文件内容读取 下载xslx文件 简单无样式的
  • 虚析构函数

    自动调用基类部分的析构函数对基类的设计有重要影响 删除指向动态分配对象的指针时 需要运行析构函数 在释放对象的内存之前清除对象 处理继承层次中的对象时 指针的静态类型可能与被删除对象的动态类型不同 可能会删除 实际指向派生类对象的基类类型指
  • Android 10 修改系统默认的字体大小

    代码路径 frameworks base core java android content res Configuration java frameworks base packages SettingsProvider res valu
  • 美团外卖智能陪伴型导购的探索与实践

    相比于其他电商场景 外卖场景对于实时发现和反馈用户兴趣的能力有着更高的要求 近年来 美团外卖算法团队摸索出了一套适用于外卖场景的智能陪伴型导购架构和策略 这一举措已经取得了显著成效 本文将详细介绍外卖搜索技术团队搭建智能陪伴型导购时 所遇到
  • 浅析深究什么是中间件

    本文发布于2009年10月30日 1 由来 因为工作的原因 我从金蝶集团调入金蝶中间件公司工作以来 经常遇到一个问题就是中间件公司是个什么公司 中间件是什么 金蝶不是做ERP的吗 怎么也做中间件 这是我以前在金蝶集团时无法想象的问题 因为金
  • R语言笔记四

    str function str Compacktly display the internal structure of an R object A diagnostic function and an alternative to su
  • AndroidUI库集合

    https hndeveloper github io 2017 github android ui html 进度条 https github com Vension V AndroidCollectSources
  • 双指针和递归

    一 双指针 1 给你一个n 给你n个数 再给一个val 去掉所有等于val的值 思路 当i和j位置都是非val值 i j 当i位置是val j 当i是val j是非val 交换 i j 当j走到最后一个位置的时候 停了 输出0 i位置的值
  • 量化术语速查表(持续更新)

    本文介绍一些量化投资相关术语 帮助大家更好地了解该行业 作者 bigquant 阅读时间 15分钟 本文由BigQuant宽客学院推出 难度标签 以下术语没有先后顺序 并将持续更新 金融相关 股票 股份公司发行的所有权凭证 债券 承诺按一定
  • GDB+Jlink调试注意事项

    1 在汇编调用C的一步要用 Step in 不要用 Step Over 因为main对于汇编来说只是一个函数 会造成程序全速运行 不能单步调试 对于汇编代码 Step in Step Over 是一样的效果 所以在进行main函数之前最好都
  • 表白代码大全_隐藏表白系列都在这里了

    点击上方 搞siao君 右上角找到 立刻设置我为 星标 置顶 每天第一时间推送给你 每天都有不一样的精彩 喜欢就多多分享哦 一 微信隐藏表白代码大全 爱你我爱你我爱你我爱你我爱你我爱你我
  • List与ArrayList的区别

    在刷题的时候发现ArrayList初始化时 有下面两种情况 List
  • 2023五大自动化测试的 Python 框架

    自2018年被评选为编程语言以来 Python在各大排行榜上一直都是名列前茅 目前 它在Tiobe指数中排名第三个 仅次于Java和C 随着该编程语言的广泛使用 基于Python的自动化测试框架也应运而生 且不断发展与丰富 因此 开发与测试
  • Nacos和Zookeeper对比

    主要平时用的较多是配置中心和服务注册中心 所以也是结合这两点功能做出对应的对比 主要比对集群模式 以下仅仅整理了个人理解后的观点 如有疑问欢迎咨询讨论 1 Zookeeper 其实明白一点Zookeeper的功能主要是它的树形节点来实现的
  • GIT Please, commit your changes or stash them before you can merge. Aborting

    用git pull来更新代码的时候 遇到了下面的问题 C error Your local changes to the following files would be overwritten by merge xxx xxx xxx p
  • Qt通过读取XML文件,绘制图形界面

    最近需要实现通过读取xml文件的形式动态绘制界面的需求 这样会很方便 在外界修改xml文件就可以了 不需要重新编译程序 一 XML文件 XML的格式和一些说明 本文就不在介绍了 菜鸟教程有更清晰的入门介绍 菜鸟教程 XML 二 QT中读取X
  • React兄弟组件之间的通讯

    案例要求 达到这样一个效果 组件拆分 搜索框是一个组件 传递状态 下面的展示列表是一个组件 使用状态 方式一 状态存在父组件之间 父组件传递给子组件消息可以使用props 子组件给父组件之间传递消息可以使用函数实现 APP组件代码 impo
  • 计算机D盘无法读取,解决Mac上的USB错误“此计算机无法读取您插入的磁盘”

    尽管USB驱动器是最紧凑 最可靠的存储解决方案 但遇到它们的问题并不少见 您可能会发现该设备不可访问 或者在连接设备时可能会遇到诸如 此计算机无法读取您插入的磁盘 之类的错误消息 您如何解决此类错误 是否可以再次访问无法读取的USB上的数据
  • 一文搞懂vue的$attrs和$listeners,和react props的对比后更容易记忆

    近期编写vue组件 用到vue新增的api attrs和 listeners 看了网上很多帖子 感觉介绍的都不直观 并不能让使用者快速了解二者到底是什么作用 本文结合实际使用场景 给出 attrs和 listeners的使用方法 并且引入引