From: Evan You Date: Tue, 14 Apr 2020 22:07:47 +0000 (-0400) Subject: feat(runtime-core): detect and warn against components made reactive X-Git-Tag: v3.0.0-alpha.13~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2e06f5bbe84155588dea82d90822a41dc93d0688;p=thirdparty%2Fvuejs%2Fcore.git feat(runtime-core): detect and warn against components made reactive close #962 --- diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index ef6f3ab85b..1bb9b4d729 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -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,