Просмотр исходного кода

fix(hmr): properly stop render effects during hmr re-render (#14023)

edison 8 месяцев назад
Родитель
Сommit
34c6ebfd7a

+ 1 - 1
packages/runtime-vapor/__tests__/components/Teleport.spec.ts

@@ -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'

+ 3 - 5
packages/runtime-vapor/src/renderEffect.ts

@@ -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 = []
-      }
     }
   }