Explorar o código

wip: enable private vnode properties even for built-ins

Evan You %!s(int64=5) %!d(string=hai) anos
pai
achega
7e6a76e587

+ 3 - 2
packages/runtime-core/src/compat/compatConfig.ts

@@ -566,10 +566,11 @@ export function getCompatConfigForKey(
 
 export function isCompatEnabled(
   key: DeprecationTypes,
-  instance: ComponentInternalInstance | null
+  instance: ComponentInternalInstance | null,
+  enableForBuiltIn = false
 ): boolean {
   // skip compat for built-in components
-  if (instance && instance.type.__isBuiltIn) {
+  if (!enableForBuiltIn && instance && instance.type.__isBuiltIn) {
     return false
   }
 

+ 8 - 3
packages/runtime-core/src/compat/renderFn.ts

@@ -307,16 +307,21 @@ export function defineLegacyVNodeProperties(vnode: VNode) {
   if (
     isCompatEnabled(
       DeprecationTypes.RENDER_FUNCTION,
-      currentRenderingInstance
+      currentRenderingInstance,
+      true /* enable for built-ins */
     ) &&
-    isCompatEnabled(DeprecationTypes.PRIVATE_APIS, currentRenderingInstance)
+    isCompatEnabled(
+      DeprecationTypes.PRIVATE_APIS,
+      currentRenderingInstance,
+      true /* enable for built-ins */
+    )
   ) {
     const context = currentRenderingInstance
     const getInstance = () => vnode.component && vnode.component.proxy
     let componentOptions: any
     Object.defineProperties(vnode, {
       tag: { get: () => vnode.type },
-      data: { get: () => vnode.props, set: p => (vnode.props = p) },
+      data: { get: () => vnode.props || {}, set: p => (vnode.props = p) },
       elm: { get: () => vnode.el },
       componentInstance: { get: getInstance },
       child: { get: getInstance },