fix(reactivity): should not trigger watch on computed ref when value is unchanged

fix #2231
This commit is contained in:
Evan You
2020-10-06 18:16:20 -04:00
parent a66e53a24f
commit 390589ec6d
3 changed files with 28 additions and 9 deletions

View File

@@ -13,7 +13,8 @@ import {
DebuggerEvent,
TrackOpTypes,
TriggerOpTypes,
triggerRef
triggerRef,
shallowRef
} from '@vue/reactivity'
// reference: https://vue-composition-api-rfc.netlify.com/api.html#watch
@@ -750,8 +751,8 @@ describe('api: watch', () => {
expect(calls).toBe(1)
})
test('should force trigger on triggerRef when watching a ref', async () => {
const v = ref({ a: 1 })
test('should force trigger on triggerRef when watching a shallow ref', async () => {
const v = shallowRef({ a: 1 })
let sideEffect = 0
watch(v, obj => {
sideEffect = obj.a
@@ -785,4 +786,17 @@ describe('api: watch', () => {
await nextTick()
expect(spy).toHaveBeenCalledTimes(1)
})
// #2231
test('computed refs should not trigger watch if value has no change', async () => {
const spy = jest.fn()
const source = ref(0)
const price = computed(() => source.value === 0)
watch(price, spy)
source.value++
await nextTick()
source.value++
await nextTick()
expect(spy).toHaveBeenCalledTimes(1)
})
})