Просмотр исходного кода

fix(reactivity): pass oldValue to computed getter (#11813)

close #11812
yangxiuxiu 1 год назад
Родитель
Сommit
98864a7ef5
2 измененных файлов с 15 добавлено и 1 удалено
  1. 14 0
      packages/reactivity/__tests__/computed.spec.ts
  2. 1 1
      packages/reactivity/src/effect.ts

+ 14 - 0
packages/reactivity/__tests__/computed.spec.ts

@@ -33,6 +33,20 @@ describe('reactivity/computed', () => {
     expect(cValue.value).toBe(1)
   })
 
+  it('pass oldValue to computed getter', () => {
+    const count = ref(0)
+    const oldValue = ref()
+    const curValue = computed(pre => {
+      oldValue.value = pre
+      return count.value
+    })
+    expect(curValue.value).toBe(0)
+    expect(oldValue.value).toBe(undefined)
+    count.value++
+    expect(curValue.value).toBe(1)
+    expect(oldValue.value).toBe(0)
+  })
+
   it('should compute lazily', () => {
     const value = reactive<{ foo?: number }>({})
     const getter = vi.fn(() => value.foo)

+ 1 - 1
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++