diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index f66935d4c8d..6ebf5d9f41b 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -72,6 +72,17 @@ describe('reactivity/computed', () => { expect(c1.value).toBe(1) }) + it('should work when chained(ref+computed)', () => { + const value = ref(0) + const provider = computed(() => value.value + consumer.value) + const consumer = computed(() => { + value.value++ + return 'foo' + }) + provider.value + expect(provider.value).toBe('1foo') + }) + it('should trigger effect when chained', () => { const value = reactive({ foo: 0 }) const getter1 = vi.fn(() => value.foo) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index 5ddf8e6f0ac..c207db0b5d1 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -290,7 +290,7 @@ export function triggerEffects( ) { pauseScheduling() for (const effect of dep.keys()) { - if (!effect.allowRecurse && effect._runnings) { + if (!effect.allowRecurse && effect._runnings && effect === activeEffect) { continue } if (