]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(runtime-core): remove attrsProxy and slotsProxy from instance (#11390)
authoredison <daiwei521@126.com>
Fri, 19 Jul 2024 09:02:14 +0000 (17:02 +0800)
committerGitHub <noreply@github.com>
Fri, 19 Jul 2024 09:02:14 +0000 (17:02 +0800)
packages/runtime-core/src/component.ts

index df3a63769897221cf2b320754b098882c9fb3e81..238c718199daa0013237ca50d98f46f6add53af6 100644 (file)
@@ -396,9 +396,6 @@ export interface ComponentInternalInstance {
   refs: Data
   emit: EmitFn
 
-  attrsProxy: Data | null
-  slotsProxy: Slots | null
-
   /**
    * used for keeping track of .once event handlers on components
    * @internal
@@ -599,9 +596,6 @@ export function createComponentInstance(
     setupState: EMPTY_OBJ,
     setupContext: null,
 
-    attrsProxy: null,
-    slotsProxy: null,
-
     // suspense related
     suspense,
     suspenseId: suspense ? suspense.pendingId : 0,
@@ -1042,15 +1036,12 @@ const attrsProxyHandlers = __DEV__
  * Dev-only
  */
 function getSlotsProxy(instance: ComponentInternalInstance): Slots {
-  return (
-    instance.slotsProxy ||
-    (instance.slotsProxy = new Proxy(instance.slots, {
-      get(target, key: string) {
-        track(instance, TrackOpTypes.GET, '$slots')
-        return target[key]
-      },
-    }))
-  )
+  return new Proxy(instance.slots, {
+    get(target, key: string) {
+      track(instance, TrackOpTypes.GET, '$slots')
+      return target[key]
+    },
+  })
 }
 
 export function createSetupContext(
@@ -1084,6 +1075,7 @@ export function createSetupContext(
     // We use getters in dev in case libs like test-utils overwrite instance
     // properties (overwrites should not be done in prod)
     let attrsProxy: Data
+    let slotsProxy: Slots
     return Object.freeze({
       get attrs() {
         return (
@@ -1092,7 +1084,7 @@ export function createSetupContext(
         )
       },
       get slots() {
-        return getSlotsProxy(instance)
+        return slotsProxy || (slotsProxy = getSlotsProxy(instance))
       },
       get emit() {
         return (event: string, ...args: any[]) => instance.emit(event, ...args)