Преглед изворни кода

refactor(runtime-vapor): simplify hydration state management (#14259)

edison пре 3 месеци
родитељ
комит
d62d86d1bb
1 измењених фајлова са 11 додато и 13 уклоњено
  1. 11 13
      packages/runtime-vapor/src/dom/hydration.ts

+ 11 - 13
packages/runtime-vapor/src/dom/hydration.ts

@@ -25,29 +25,27 @@ import {
 import { findBlockNode, remove } from '../block'
 import type { DynamicFragment } from '../fragment'
 
-const isHydratingStack = [] as boolean[]
-export let isHydrating = false
 export let currentHydrationNode: Node | null = null
 
 let _hydrateDynamicFragment:
   | ((frag: DynamicFragment, isEmpty: boolean) => void)
   | undefined
 
-function pushIsHydrating(value: boolean): void {
-  isHydratingStack.push((isHydrating = value))
-}
-
-function popIsHydrating(): void {
-  isHydratingStack.pop()
-  isHydrating = isHydratingStack[isHydratingStack.length - 1] || false
+export let isHydrating = false
+function setIsHydrating(value: boolean) {
+  try {
+    return isHydrating
+  } finally {
+    isHydrating = value
+  }
 }
 
 export function runWithoutHydration(fn: () => any): any {
+  const prev = setIsHydrating(false)
   try {
-    pushIsHydrating(false)
     return fn()
   } finally {
-    popIsHydrating()
+    setIsHydrating(prev)
   }
 }
 
@@ -75,12 +73,12 @@ function performHydration<T>(
     isOptimized = true
   }
   enableHydrationNodeLookup()
-  pushIsHydrating(true)
+  const prev = setIsHydrating(true)
   setup()
   const res = fn()
   cleanup()
   currentHydrationNode = null
-  popIsHydrating()
+  setIsHydrating(prev)
   if (!isHydrating) disableHydrationNodeLookup()
   return res
 }