fix(runtime-core): should pause tracking when initializing legacy options (#2524)

fix #2521
This commit is contained in:
HcySunYang 2020-11-28 03:01:01 +08:00 committed by GitHub
parent 5b6266284d
commit 0ff2a4f1c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 0 deletions

View File

@ -232,4 +232,47 @@ describe('renderer: component', () => {
await nextTick()
expect(serializeInner(root)).toBe(`<div>1</div><div>1</div>`)
})
// #2521
test('should pause tracking deps when initializing legacy options', async () => {
let childInstance = null as any
const Child = {
props: ['foo'],
data() {
return {
count: 0
}
},
watch: {
foo: {
immediate: true,
handler() {
;(this as any).count
}
}
},
created() {
childInstance = this as any
childInstance.count
},
render() {
return h('h1', (this as any).count)
}
}
const App = {
setup() {
return () => h(Child)
},
updated: jest.fn()
}
const root = nodeOps.createElement('div')
render(h(App), root)
expect(App.updated).toHaveBeenCalledTimes(0)
childInstance.count++
await nextTick()
expect(App.updated).toHaveBeenCalledTimes(0)
})
})

View File

@ -704,7 +704,9 @@ function finishComponentSetup(
// support for 2.x options
if (__FEATURE_OPTIONS_API__) {
currentInstance = instance
pauseTracking()
applyOptions(instance, Component)
resetTracking()
currentInstance = null
}