fix(reactivity): fix ref tracking of self-stopping effects

close #5707
This commit is contained in:
Evan You
2022-04-13 17:00:31 +08:00
parent f4f5e80a19
commit 154233abdb
2 changed files with 33 additions and 1 deletions

View File

@@ -64,6 +64,10 @@ export class ReactiveEffect<T = any> {
* @internal
*/
allowRecurse?: boolean
/**
* @internal
*/
private deferStop?: boolean
onStop?: () => void
// dev only
@@ -114,11 +118,18 @@ export class ReactiveEffect<T = any> {
activeEffect = this.parent
shouldTrack = lastShouldTrack
this.parent = undefined
if (this.deferStop) {
this.stop()
}
}
}
stop() {
if (this.active) {
// stopped while running itself - defer the cleanup
if (activeEffect === this) {
this.deferStop = true
} else if (this.active) {
cleanupEffect(this)
if (this.onStop) {
this.onStop()