From: edison Date: Fri, 13 May 2022 00:20:04 +0000 (+0800) Subject: fix(watch): fix watching multiple sources containing shallowRef (#5381) X-Git-Tag: v3.2.34-beta.1~27 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=220f255fe94d5f1d2ccf3af3a469e9328c916167;p=thirdparty%2Fvuejs%2Fcore.git fix(watch): fix watching multiple sources containing shallowRef (#5381) fix #5371 --- diff --git a/packages/runtime-core/__tests__/apiWatch.spec.ts b/packages/runtime-core/__tests__/apiWatch.spec.ts index 1c6fb0a88d..118c573268 100644 --- a/packages/runtime-core/__tests__/apiWatch.spec.ts +++ b/packages/runtime-core/__tests__/apiWatch.spec.ts @@ -892,6 +892,21 @@ describe('api: watch', () => { expect(sideEffect).toBe(2) }) + test('should force trigger on triggerRef when watching multiple sources: shallow ref array', async () => { + const v = shallowRef([] as any) + const spy = jest.fn() + watch([v], () => { + spy() + }) + + v.value.push(1) + triggerRef(v) + + await nextTick() + // should trigger now + expect(spy).toHaveBeenCalledTimes(1) + }) + // #2125 test('watchEffect should not recursively trigger itself', async () => { const spy = jest.fn() diff --git a/packages/runtime-core/src/apiWatch.ts b/packages/runtime-core/src/apiWatch.ts index 84937eeae6..a1922f0cd2 100644 --- a/packages/runtime-core/src/apiWatch.ts +++ b/packages/runtime-core/src/apiWatch.ts @@ -212,7 +212,7 @@ function doWatch( deep = true } else if (isArray(source)) { isMultiSource = true - forceTrigger = source.some(isReactive) + forceTrigger = source.some(s => isReactive(s) || isShallow(s)) getter = () => source.map(s => { if (isRef(s)) {