fix(runtime-core): instanceWatch should pass this.proxy
to source as the first argument (#2753)
This commit is contained in:
parent
bd1240c127
commit
ec8fd10cec
@ -15,7 +15,8 @@ import {
|
|||||||
nodeOps,
|
nodeOps,
|
||||||
serializeInner,
|
serializeInner,
|
||||||
TestElement,
|
TestElement,
|
||||||
h
|
h,
|
||||||
|
createApp
|
||||||
} from '@vue/runtime-test'
|
} from '@vue/runtime-test'
|
||||||
import {
|
import {
|
||||||
ITERATE_KEY,
|
ITERATE_KEY,
|
||||||
@ -857,4 +858,23 @@ describe('api: watch', () => {
|
|||||||
|
|
||||||
expect(instance!.effects![0].active).toBe(false)
|
expect(instance!.effects![0].active).toBe(false)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('this.$watch should pass `this.proxy` to watch source as the first argument ', () => {
|
||||||
|
let instance: any
|
||||||
|
const source = jest.fn()
|
||||||
|
|
||||||
|
const Comp = defineComponent({
|
||||||
|
render() {},
|
||||||
|
created(this: any) {
|
||||||
|
instance = this
|
||||||
|
this.$watch(source, function() {})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const root = nodeOps.createElement('div')
|
||||||
|
createApp(Comp).mount(root)
|
||||||
|
|
||||||
|
expect(instance).toBeDefined()
|
||||||
|
expect(source).toHaveBeenCalledWith(instance)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -181,7 +181,9 @@ function doWatch(
|
|||||||
} else if (isReactive(s)) {
|
} else if (isReactive(s)) {
|
||||||
return traverse(s)
|
return traverse(s)
|
||||||
} else if (isFunction(s)) {
|
} else if (isFunction(s)) {
|
||||||
return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER)
|
return callWithErrorHandling(s, instance, ErrorCodes.WATCH_GETTER, [
|
||||||
|
instance && (instance.proxy as any)
|
||||||
|
])
|
||||||
} else {
|
} else {
|
||||||
__DEV__ && warnInvalidSource(s)
|
__DEV__ && warnInvalidSource(s)
|
||||||
}
|
}
|
||||||
@ -190,7 +192,9 @@ function doWatch(
|
|||||||
if (cb) {
|
if (cb) {
|
||||||
// getter with cb
|
// getter with cb
|
||||||
getter = () =>
|
getter = () =>
|
||||||
callWithErrorHandling(source, instance, ErrorCodes.WATCH_GETTER)
|
callWithErrorHandling(source, instance, ErrorCodes.WATCH_GETTER, [
|
||||||
|
instance && (instance.proxy as any)
|
||||||
|
])
|
||||||
} else {
|
} else {
|
||||||
// no cb -> simple effect
|
// no cb -> simple effect
|
||||||
getter = () => {
|
getter = () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user