fix(watch): should trigger watcher callback on triggerRef when watching ref source

fix #1736
This commit is contained in:
Evan You
2020-07-30 18:29:38 -04:00
parent 09702e95b9
commit fce2689ff1
2 changed files with 29 additions and 4 deletions

View File

@@ -12,7 +12,8 @@ import {
ITERATE_KEY,
DebuggerEvent,
TrackOpTypes,
TriggerOpTypes
TriggerOpTypes,
triggerRef
} from '@vue/reactivity'
// reference: https://vue-composition-api-rfc.netlify.com/api.html#watch
@@ -637,4 +638,27 @@ describe('api: watch', () => {
v.value++
expect(calls).toBe(1)
})
test('should force trigger on triggerRef when watching a ref', async () => {
const v = ref({ a: 1 })
let sideEffect = 0
watch(v, obj => {
sideEffect = obj.a
})
v.value = v.value
await nextTick()
// should not trigger
expect(sideEffect).toBe(0)
v.value.a++
await nextTick()
// should not trigger
expect(sideEffect).toBe(0)
triggerRef(v)
await nextTick()
// should trigger now
expect(sideEffect).toBe(2)
})
})