]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(hmr): properly stop render effects during hmr re-render (#14023)
authoredison <daiwei521@126.com>
Mon, 27 Oct 2025 03:00:50 +0000 (11:00 +0800)
committerGitHub <noreply@github.com>
Mon, 27 Oct 2025 03:00:50 +0000 (11:00 +0800)
packages/runtime-vapor/__tests__/components/Teleport.spec.ts
packages/runtime-vapor/src/renderEffect.ts

index 45a2e5858c0f45c79434b4bdc80c397a002fb62b..d4282ab8a6e044e9be3561ee9d4568e47841a602 100644 (file)
@@ -195,7 +195,7 @@ describe('renderer: VaporTeleport', () => {
       expect(target.innerHTML).toBe('<div>teleported 2</div>')
     })
 
-    test.todo('parent rerender + toggle disabled', async () => {
+    test('parent rerender + toggle disabled', async () => {
       const target = document.createElement('div')
       const root = document.createElement('div')
       const parentId = 'test3-parent-rerender'
index d41ee357191fb39483f854aad149795bfc478724..3c937c0ed5866aabec275462a70d93dab5040d4e 100644 (file)
@@ -41,6 +41,9 @@ export class RenderEffect extends ReactiveEffect {
         this.onTrigger = instance.rtg
           ? e => invokeArrayFns(instance.rtg!, e)
           : void 0
+
+        // register effect for stopping them during HMR rerender
+        ;(instance.renderEffects || (instance.renderEffects = [])).push(this)
       }
       job.i = instance
     }
@@ -71,11 +74,6 @@ export class RenderEffect extends ReactiveEffect {
     setCurrentInstance(...prev)
     if (__DEV__ && instance) {
       startMeasure(instance, `renderEffect`)
-
-      if (instance.renderEffects) {
-        instance.renderEffects.forEach(e => e.stop())
-        instance.renderEffects = []
-      }
     }
   }