소스 검색

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

daiwei 2 달 전
부모
커밋
136531137a
2개의 변경된 파일5개의 추가작업 그리고 6개의 파일을 삭제
  1. 1 2
      packages/runtime-vapor/src/components/KeepAlive.ts
  2. 4 4
      packages/runtime-vapor/src/fragment.ts

+ 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()