expect(fnSpy).toHaveBeenCalledTimes(1)
})
+ it('should trigger all effects when array lenght is set 0', () => {
+ const observed: any = reactive([1])
+ let dummy, record
+ effect(() => {
+ dummy = observed.length
+ })
+ effect(() => {
+ record = observed[0]
+ })
+ expect(dummy).toBe(1)
+ expect(record).toBe(1)
+
+ observed[1] = 2
+ expect(observed[1]).toBe(2)
+
+ observed.unshift(3)
+ expect(dummy).toBe(3)
+ expect(record).toBe(3)
+
+ observed.length = 0
+ expect(dummy).toBe(0)
+ expect(record).toBeUndefined()
+ })
+
it('should handle self dependency mutations', () => {
const count = ref(0)
effect(() => {
}
const effects = new Set<ReactiveEffect>()
const computedRunners = new Set<ReactiveEffect>()
- if (type === TriggerOpTypes.CLEAR) {
- // collection being cleared, trigger all effects for target
+ if (type === TriggerOpTypes.CLEAR || (key === 'length' && isArray(target))) {
+ // collection being cleared or Array length mutation
+ // trigger all effects for target
depsMap.forEach(dep => {
addRunners(effects, computedRunners, dep)
})