wip: $attrs class/style warning
This commit is contained in:
parent
c9a93a5c4c
commit
d4af747a50
packages/runtime-core/src/compat
@ -25,6 +25,7 @@ export const enum DeprecationTypes {
|
|||||||
INSTANCE_CHILDREN = 'INSTANCE_CHILDREN',
|
INSTANCE_CHILDREN = 'INSTANCE_CHILDREN',
|
||||||
INSTANCE_LISTENERS = 'INSTANCE_LISTENERS',
|
INSTANCE_LISTENERS = 'INSTANCE_LISTENERS',
|
||||||
INSTANCE_SCOPED_SLOTS = 'INSTANCE_SCOPED_SLOTS',
|
INSTANCE_SCOPED_SLOTS = 'INSTANCE_SCOPED_SLOTS',
|
||||||
|
INSTANCE_ATTRS_CLASS_STYLE = 'INSTANCE_ATTRS_CLASS_STYLE',
|
||||||
|
|
||||||
OPTIONS_DATA_FN = 'OPTIONS_DATA_FN',
|
OPTIONS_DATA_FN = 'OPTIONS_DATA_FN',
|
||||||
OPTIONS_DATA_MERGE = 'OPTIONS_DATA_MERGE',
|
OPTIONS_DATA_MERGE = 'OPTIONS_DATA_MERGE',
|
||||||
@ -188,6 +189,19 @@ const deprecationData: Record<DeprecationTypes, DeprecationData> = {
|
|||||||
link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
|
link: `https://v3.vuejs.org/guide/migration/slots-unification.html`
|
||||||
},
|
},
|
||||||
|
|
||||||
|
[DeprecationTypes.INSTANCE_ATTRS_CLASS_STYLE]: {
|
||||||
|
message:
|
||||||
|
`vm.$attrs now includes class and style bindings passed from parent. ` +
|
||||||
|
`Components with inheritAttrs: false will no longer auto-inherit ` +
|
||||||
|
`class/style on its root element. If your code relies on this behavior, ` +
|
||||||
|
`you may see broken styling and need to adjust your CSS. Otherwise, ` +
|
||||||
|
`you can suppress this warning with:` +
|
||||||
|
`\n\n configureCompat({ ${
|
||||||
|
DeprecationTypes.INSTANCE_ATTRS_CLASS_STYLE
|
||||||
|
}: { warning: false }})\n`,
|
||||||
|
link: `https://v3.vuejs.org/guide/migration/attrs-includes-class-style.html`
|
||||||
|
},
|
||||||
|
|
||||||
[DeprecationTypes.OPTIONS_DATA_FN]: {
|
[DeprecationTypes.OPTIONS_DATA_FN]: {
|
||||||
message:
|
message:
|
||||||
`The "data" option can no longer be a plain object. ` +
|
`The "data" option can no longer be a plain object. ` +
|
||||||
|
@ -2,9 +2,10 @@ import { extend, NOOP } from '@vue/shared'
|
|||||||
import { PublicPropertiesMap } from '../componentPublicInstance'
|
import { PublicPropertiesMap } from '../componentPublicInstance'
|
||||||
import { getCompatChildren } from './instanceChildren'
|
import { getCompatChildren } from './instanceChildren'
|
||||||
import { assertCompatEnabled } from './compatConfig'
|
import { assertCompatEnabled } from './compatConfig'
|
||||||
import { DeprecationTypes } from './deprecations'
|
import { DeprecationTypes, warnDeprecation } from './deprecations'
|
||||||
import { off, on, once } from './instanceEventEmitter'
|
import { off, on, once } from './instanceEventEmitter'
|
||||||
import { getCompatListeners } from './instanceListeners'
|
import { getCompatListeners } from './instanceListeners'
|
||||||
|
import { shallowReadonly } from '@vue/reactivity'
|
||||||
|
|
||||||
export function installCompatInstanceProperties(map: PublicPropertiesMap) {
|
export function installCompatInstanceProperties(map: PublicPropertiesMap) {
|
||||||
const set = (target: any, key: any, val: any) => {
|
const set = (target: any, key: any, val: any) => {
|
||||||
@ -40,7 +41,15 @@ export function installCompatInstanceProperties(map: PublicPropertiesMap) {
|
|||||||
|
|
||||||
$scopedSlots: i => {
|
$scopedSlots: i => {
|
||||||
assertCompatEnabled(DeprecationTypes.INSTANCE_SCOPED_SLOTS)
|
assertCompatEnabled(DeprecationTypes.INSTANCE_SCOPED_SLOTS)
|
||||||
return i.slots
|
return __DEV__ ? shallowReadonly(i.slots) : i.slots
|
||||||
|
},
|
||||||
|
|
||||||
|
// overrides existing accessor
|
||||||
|
$attrs: i => {
|
||||||
|
if (__DEV__ && i.type.inheritAttrs === false) {
|
||||||
|
warnDeprecation(DeprecationTypes.INSTANCE_ATTRS_CLASS_STYLE)
|
||||||
|
}
|
||||||
|
return __DEV__ ? shallowReadonly(i.attrs) : i.attrs
|
||||||
},
|
},
|
||||||
|
|
||||||
$on: i => on.bind(null, i),
|
$on: i => on.bind(null, i),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user