Vue为什么要谨慎使用$attrs与$listeners
时间: 2024-01-01 07:03:15 浏览: 62
Vue 中的 $attrs 和 $listeners 属性用于将父组件的属性和监听器传递给子组件。然而,如果使用不当,可能会导致意外的行为。
$attrs 属性包含了父组件中非 props 的属性,传递这些属性可能会使得子组件的行为不稳定,因为这些属性可能不是子组件所期望的。同时,如果传递了大量属性,也可能会对性能产生负面影响。
$listeners 属性包含了父组件中的所有监听器。然而,绑定在根元素上的监听器并不会被包含在内,这可能会导致一些意外的行为。另外,由于该属性只包含监听器,而不包括被监听属性的值,因此在使用时需要额外注意。
因此,当使用 $attrs 和 $listeners 属性时,需要谨慎使用,避免引起意外的行为。
相关问题
vue $attrs $listeners
$attrs和$listeners是Vue中的两个属性。$attrs用于获取父组件传递给子组件的所有属性,而$listeners则可以获取子组件中所有绑定的事件监听器。这两个属性在组件中非常有用,可以帮助我们更好地处理组件间的数据传递和事件处理。
vue中$table 里面的$attrs
在 Vue 中,当你使用某些组件时,组件可能会使用 `$attrs` 属性来传递一些额外的属性到组件内部。
在 `$attrs` 中,存储了组件外部传入的、但是组件内部没有声明的所有属性。这些属性可以通过 `$attrs` 访问并使用。
在 `$attrs` 中,还有一个特殊的属性 `$listeners`,用于存储组件外部传入的、但是组件内部没有声明的事件监听器。这些事件监听器可以通过 `$listeners` 访问并使用。
当你在使用 `el-table` 组件时,`$attrs` 属性可以用于传递一些额外的表格属性到组件内部。例如,你可以通过 `$attrs` 给表格添加 `border`、`size`、`stripe` 等属性,如下所示:
```html
<el-table
:data="tableData"
:attrs="{ border: true, size: 'medium', stripe: true }"
>
<!-- 表格列定义 -->
</el-table>
```
在上面的代码中,我们通过 `:attrs` 给表格添加了 `border`、`size`、`stripe` 等属性。这些属性会被传递到 `el-table` 组件内部,并应用到表格上。在 `el-table` 组件内部,你可以通过 `$attrs` 访问这些属性,如下所示:
```js
export default {
name: 'MyTable',
props: {
// ...
},
render(h) {
return h(
'el-table',
{
attrs: this.$attrs, // 将外部传入的属性应用到表格上
on: this.$listeners // 将外部传入的事件监听器绑定到表格上
},
this.$slots.default // 表格列定义
)
}
}
```
在上面的代码中,我们将 `$attrs` 属性应用到了 `el-table` 组件上。这样,所有在外部传入的、但是组件内部没有声明的属性都会被应用到表格上。
阅读全文