feat(runtime-core): detect and warn against components made reactive
close #962
This commit is contained in:
parent
3e7bb7d110
commit
2e06f5bbe8
@ -17,7 +17,7 @@ import {
|
||||
ClassComponent
|
||||
} from './component'
|
||||
import { RawSlots } from './componentSlots'
|
||||
import { isReactive, Ref } from '@vue/reactivity'
|
||||
import { isReactive, Ref, toRaw } from '@vue/reactivity'
|
||||
import { AppContext } from './apiCreateApp'
|
||||
import {
|
||||
SuspenseImpl,
|
||||
@ -236,7 +236,7 @@ const createVNodeWithArgsTransform = (
|
||||
|
||||
export const InternalObjectSymbol = Symbol()
|
||||
|
||||
export const createVNode = (__DEV__
|
||||
export const createVNode = (false
|
||||
? createVNodeWithArgsTransform
|
||||
: _createVNode) as typeof _createVNode
|
||||
|
||||
@ -292,6 +292,22 @@ function _createVNode(
|
||||
? ShapeFlags.FUNCTIONAL_COMPONENT
|
||||
: 0
|
||||
|
||||
if (
|
||||
__DEV__ &&
|
||||
shapeFlag & ShapeFlags.STATEFUL_COMPONENT &&
|
||||
isReactive(type)
|
||||
) {
|
||||
type = toRaw(type)
|
||||
warn(
|
||||
`Vue received a Component which was made a reactive object. This can ` +
|
||||
`lead to unnecessary performance overhead, and should be avoided by ` +
|
||||
`marking the component with \`markNonReactive\` or using \`shallowRef\` ` +
|
||||
`instead of \`ref\`.`,
|
||||
`\nComponent that was made reactive: `,
|
||||
type
|
||||
)
|
||||
}
|
||||
|
||||
const vnode: VNode = {
|
||||
_isVNode: true,
|
||||
type,
|
||||
|
Loading…
Reference in New Issue
Block a user