# classstyle を含む $attrs
breaking

# 概要

$attrs は、 classstyle を含む、コンポーネントに渡されるすべての属性が含まれるようになりました。

# 2.x の挙動

classstyle 属性は、Vue 2 の仮想 DOM 実装でいくつかの特別な処理が行われます。そのため、他のすべての属性は含まれていますが、これらは $attrs に含まれていません。

この副作用は、 inheritAttrs: false を使用した場合に明らかになります:

  • $attrs に含まれる属性は、自動的にルート要素に追加されなくなり、どこに追加するかは開発者の判断に委ねられます。
  • しかし、 classstyle は、 $attrs の一部ではないので、コンポーネントのルート要素に適用されます:
<template>
  <label>
    <input type="text" v-bind="$attrs" />
  </label>
</template>
<script>
export default {
  inheritAttrs: false
}
</script>
1
2
3
4
5
6
7
8
9
10

このような使い方をする場合:

<my-component id="my-id" class="my-class"></my-component>
1

…以下の HTML が生成されます:

<label class="my-class">
  <input type="text" id="my-id" />
</label>
1
2
3

# 3.x の挙動

$attrs には、すべての属性が含まれているので、すべての属性を別の要素に適用することが簡単にできます。先ほどの例は、次の HTML が生成されます:

<label>
  <input type="text" id="my-id" class="my-class" />
</label>
1
2
3

# 移行の戦略

inheritAttrs: false を使用しているコンポーネントでは、スタイルの適用が意図したとおりに動作することを確認してください。もし以前に classstyle の特別な動作に依存していた場合、これらの属性が別の要素に適用されている可能性があるため、一部の見た目が崩れている可能性があります。

移行ビルドのフラグ: INSTANCE_ATTRS_CLASS_STYLE

# 参照

Deployed on Netlify.
最終更新日: 2021-06-19, 04:36:37 UTC