fix(reactivity): scheduled effect should not execute if stopped

fix #910
This commit is contained in:
Evan You
2020-04-02 19:49:45 -04:00
parent 5c33776e67
commit 0764c33d3d
2 changed files with 40 additions and 22 deletions

View File

@@ -678,6 +678,28 @@ describe('reactivity/effect', () => {
expect(dummy).toBe(3)
})
it('stop with scheduler', () => {
let dummy
const obj = reactive({ prop: 1 })
const queue: (() => void)[] = []
const runner = effect(
() => {
dummy = obj.prop
},
{
scheduler: e => queue.push(e)
}
)
obj.prop = 2
expect(dummy).toBe(1)
expect(queue.length).toBe(1)
stop(runner)
// a scheduled effect should not execute anymore after stopped
queue.forEach(e => e())
expect(dummy).toBe(1)
})
it('events: onStop', () => {
const onStop = jest.fn()
const runner = effect(() => {}, {