Переглянути джерело

refactor(runtime-vapor): track root DynamicFragment for KeepAlive cache keys

daiwei 2 місяців тому
батько
коміт
136531137a

+ 1 - 2
packages/runtime-vapor/src/components/KeepAlive.ts

@@ -136,8 +136,7 @@ export function resolveKeepAliveKey(
 ): CacheKey {
   const frag = currentDynamicFragment
   if (frag) {
-    let root = frag
-    while (root.parentDynamicFragment) root = root.parentDynamicFragment
+    const root = frag.rootDynamicFragment
     let fragKey = key
     if (fragKey === undefined) {
       const current = root.current

+ 4 - 4
packages/runtime-vapor/src/fragment.ts

@@ -105,7 +105,7 @@ export class DynamicFragment extends VaporFragment {
   fallback?: BlockFn
   anchorLabel?: string
   keyed?: boolean
-  parentDynamicFragment: DynamicFragment | null
+  rootDynamicFragment: DynamicFragment
 
   // fallthrough attrs
   attrs?: Record<string, any>
@@ -123,12 +123,12 @@ export class DynamicFragment extends VaporFragment {
     this.keyed = keyed
     this.slotOwner = currentSlotOwner
     this.keepAliveCtx = currentKeepAliveCtx
-    this.parentDynamicFragment =
+    this.rootDynamicFragment =
       this.keepAliveCtx &&
       currentDynamicFragment &&
       currentDynamicFragment.keepAliveCtx === this.keepAliveCtx
-        ? currentDynamicFragment
-        : null
+        ? currentDynamicFragment.rootDynamicFragment
+        : this
     if (isHydrating) {
       this.anchorLabel = anchorLabel
       locateHydrationNode()