From aa5dafd2b55d42d6a29316a3bc91aea85c676a0b Mon Sep 17 00:00:00 2001 From: Tycho Date: Mon, 16 Sep 2024 10:28:46 +0800 Subject: [PATCH] fix(reactivity): rely on dirty check only when computed has deps (#11931) close #11929 --- packages/reactivity/__tests__/computed.spec.ts | 7 +++++++ packages/reactivity/src/effect.ts | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index e0b47cf56eb..543c9c6e770 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -23,6 +23,7 @@ import { ref, shallowRef, toRaw, + triggerRef, } from '../src' import { EffectFlags, pauseTracking, resetTracking } from '../src/effect' import type { ComputedRef, ComputedRefImpl } from '../src/computed' @@ -1004,4 +1005,10 @@ describe('reactivity/computed', () => { await nextTick() expect(serializeInner(root)).toBe(`

Step 2

`) }) + + it('manual trigger computed', () => { + const cValue = computed(() => 1) + triggerRef(cValue) + expect(cValue.value).toBe(1) + }) }) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 8d323288b6c..2dae285d166 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -352,7 +352,12 @@ export function refreshComputed(computed: ComputedRefImpl): undefined { // and therefore tracks no deps, thus we cannot rely on the dirty check. // Instead, computed always re-evaluate and relies on the globalVersion // fast path above for caching. - if (dep.version > 0 && !computed.isSSR && !isDirty(computed)) { + if ( + dep.version > 0 && + !computed.isSSR && + computed.deps && + !isDirty(computed) + ) { computed.flags &= ~EffectFlags.RUNNING return }