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