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