TrackOpTypes,
TriggerOpTypes,
DebuggerEvent,
- markNonReactive
+ markNonReactive,
+ ref
} from '../src/index'
import { ITERATE_KEY } from '../src/effect'
obj.foo = NaN
expect(fnSpy).toHaveBeenCalledTimes(1)
})
+
+ it('should handle self dependency mutations', () => {
+ const count = ref(0)
+ effect(() => {
+ count.value++
+ })
+ expect(count.value).toBe(1)
+ count.value = 10
+ expect(count.value).toBe(11)
+ })
})
) {
if (effectsToAdd !== void 0) {
effectsToAdd.forEach(effect => {
- if (effect.options.computed) {
- computedRunners.add(effect)
+ if (effect !== activeEffect) {
+ if (effect.options.computed) {
+ computedRunners.add(effect)
+ } else {
+ effects.add(effect)
+ }
} else {
- effects.add(effect)
+ // the effect mutated its own dependency during its execution.
+ // this can be caused by operations like foo.value++
+ // do not trigger or we end in an infinite loop
}
})
}