Appearance
$listeners
の削除 破壊的変更
概要
Vue 3 では、$listeners
オブジェクトは削除されました。イベントリスナーは $attrs
の一部になりました:
js
{
text: 'this is an attribute',
onClose: () => console.log('close Event triggered')
}
2.x の構文
Vue 2 では、コンポーネントに渡される属性には this.$attrs
でアクセスし、イベントリスナーには this.$listeners
でアクセスできます。 inheritAttrs: false
と組み合わせることで、これらの属性やリスナーをルート要素ではなく他の要素に適用できます:
html
<template>
<label>
<input type="text" v-bind="$attrs" v-on="$listeners" />
</label>
</template>
<script>
export default {
inheritAttrs: false
}
</script>
3.x の構文
Vue 3 の仮想 DOM では、イベントリスナーは単なる属性となり、接頭辞に on
が付き、$attrs
オブジェクトの一部となるため、$listeners
は削除されました。
vue
<template>
<label>
<input type="text" v-bind="$attrs" />
</label>
</template>
<script>
export default {
inheritAttrs: false
}
</script>
このコンポーネントが id
属性と v-on:close
リスナーを受け取った場合、 $attrs
オブジェクトは次のようになります:
js
{
id: 'my-input',
onClose: () => console.log('close Event triggered')
}
移行手順
$listeners
の使用箇所をすべて削除します。