From: djy0 Date: Mon, 24 Feb 2020 17:03:02 +0000 (+0800) Subject: fix(runtime-core): make watchEffect ignore deep option (#765) X-Git-Tag: v3.0.0-alpha.7~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=19a799c28b149b14e85d9e2081fa65ed58d108ba;p=thirdparty%2Fvuejs%2Fcore.git fix(runtime-core): make watchEffect ignore deep option (#765) --- diff --git a/packages/runtime-core/__tests__/apiWatch.spec.ts b/packages/runtime-core/__tests__/apiWatch.spec.ts index 796b2cbff5..36db04b199 100644 --- a/packages/runtime-core/__tests__/apiWatch.spec.ts +++ b/packages/runtime-core/__tests__/apiWatch.spec.ts @@ -410,6 +410,24 @@ describe('api: watch', () => { expect(dummy).toBe(1) }) + it('warn and not respect deep option when using effect', async () => { + const arr = ref([1, [2]]) + let spy = jest.fn() + watchEffect( + () => { + spy() + return arr + }, + // @ts-ignore + { deep: true } + ) + expect(spy).toHaveBeenCalledTimes(1) + ;(arr.value[1] as Array)[0] = 3 + await nextTick() + expect(spy).toHaveBeenCalledTimes(1) + expect(`"deep" option is only respected`).toHaveBeenWarned() + }) + it('onTrack', async () => { const events: DebuggerEvent[] = [] let dummy diff --git a/packages/runtime-core/src/apiWatch.ts b/packages/runtime-core/src/apiWatch.ts index 1a2ecb5ec2..71cb485a53 100644 --- a/packages/runtime-core/src/apiWatch.ts +++ b/packages/runtime-core/src/apiWatch.ts @@ -139,13 +139,13 @@ function doWatch( if (immediate !== undefined) { warn( `watch() "immediate" option is only respected when using the ` + - `watch(source, callback) signature.` + `watch(source, callback, options?) signature.` ) } if (deep !== undefined) { warn( `watch() "deep" option is only respected when using the ` + - `watch(source, callback) signature.` + `watch(source, callback, options?) signature.` ) } } @@ -186,7 +186,7 @@ function doWatch( } } - if (deep) { + if (cb && deep) { const baseGetter = getter getter = () => traverse(baseGetter()) }