From 6eb47f000a1b54b2419c031979502d2793c5189d Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 19 Jul 2021 13:37:03 -0400 Subject: [PATCH] fix(reactivity): computed should not trigger scheduler if stopped fix #4149 --- .../reactivity/__tests__/computed.spec.ts | 20 +++++++++++++++++++ packages/reactivity/src/computed.ts | 2 +- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index 3f40b1c45..34aec01d3 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -466,5 +466,25 @@ describe('reactivity/computed', () => { await tick expect(effectSpy).toHaveBeenCalledTimes(2) }) + + test('should not compute if deactivated before scheduler is called', async () => { + const c1Spy = jest.fn() + const src = ref(0) + const c1 = computed(() => { + c1Spy() + return src.value % 2 + }) + effect(() => c1.value) + expect(c1Spy).toHaveBeenCalledTimes(1) + + // schedule stop + schedule(() => { + c1.effect.stop() + }) + // trigger + src.value++ + await tick + expect(c1Spy).toHaveBeenCalledTimes(1) + }) }) }) diff --git a/packages/reactivity/src/computed.ts b/packages/reactivity/src/computed.ts index c992031d5..fdc5c58f8 100644 --- a/packages/reactivity/src/computed.ts +++ b/packages/reactivity/src/computed.ts @@ -58,7 +58,7 @@ class ComputedRefImpl { scheduled = true hasCompareTarget = false scheduler(() => { - if (this._get() !== valueToCompare) { + if (this.effect.active && this._get() !== valueToCompare) { triggerRefValue(this) } scheduled = false