From 401013b8da6706fe4bd6337d8d2af0dbdd6f2976 Mon Sep 17 00:00:00 2001 From: yangxiuxiu1115 <1974364190@qq.com> Date: Wed, 4 Sep 2024 23:20:06 +0800 Subject: [PATCH 1/3] fix(reactivity): pass previous value when trigger getter --- packages/reactivity/src/effect.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/reactivity/src/effect.ts b/packages/reactivity/src/effect.ts index a22990f6729..88493e4e9a9 100644 --- a/packages/reactivity/src/effect.ts +++ b/packages/reactivity/src/effect.ts @@ -381,7 +381,7 @@ export function refreshComputed(computed: ComputedRefImpl): false | undefined { try { prepareDeps(computed) - const value = computed.fn() + const value = computed.fn(computed._value) if (dep.version === 0 || hasChanged(value, computed._value)) { computed._value = value dep.version++ From 157569d2e515869365e2fc543ed58c4627dd66a9 Mon Sep 17 00:00:00 2001 From: yangxiuxiu1115 <1974364190@qq.com> Date: Wed, 4 Sep 2024 23:28:05 +0800 Subject: [PATCH 2/3] chore: test case --- packages/reactivity/__tests__/computed.spec.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index 08b034f79f1..b9d8b9759d5 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -33,6 +33,20 @@ describe('reactivity/computed', () => { expect(cValue.value).toBe(1) }) + it('support get previous value', () => { + const count = ref(0) + const preValue = ref() + const cValue = computed(pre => { + preValue.value = pre + return count.value + }) + expect(cValue.value).toBe(0) + expect(preValue.value).toBe(undefined) + count.value++ + expect(cValue.value).toBe(1) + expect(preValue.value).toBe(0) + }) + it('should compute lazily', () => { const value = reactive<{ foo?: number }>({}) const getter = vi.fn(() => value.foo) From cb9c0a58b44f3c5cafef3180952ea6afa839c787 Mon Sep 17 00:00:00 2001 From: daiwei Date: Thu, 5 Sep 2024 08:52:04 +0800 Subject: [PATCH 3/3] test: improve test case --- packages/reactivity/__tests__/computed.spec.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/reactivity/__tests__/computed.spec.ts b/packages/reactivity/__tests__/computed.spec.ts index b9d8b9759d5..c3409eee77e 100644 --- a/packages/reactivity/__tests__/computed.spec.ts +++ b/packages/reactivity/__tests__/computed.spec.ts @@ -33,18 +33,18 @@ describe('reactivity/computed', () => { expect(cValue.value).toBe(1) }) - it('support get previous value', () => { + it('pass oldValue to computed getter', () => { const count = ref(0) - const preValue = ref() - const cValue = computed(pre => { - preValue.value = pre + const oldValue = ref() + const curValue = computed(pre => { + oldValue.value = pre return count.value }) - expect(cValue.value).toBe(0) - expect(preValue.value).toBe(undefined) + expect(curValue.value).toBe(0) + expect(oldValue.value).toBe(undefined) count.value++ - expect(cValue.value).toBe(1) - expect(preValue.value).toBe(0) + expect(curValue.value).toBe(1) + expect(oldValue.value).toBe(0) }) it('should compute lazily', () => {