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