Skip to content

Commit 0e5a3c4

Browse files
committed
fix(reactivity): track length on for in iteration on Array
fix #2427
1 parent d9ad45a commit 0e5a3c4

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

packages/reactivity/__tests__/reactiveArray.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,21 @@ describe('reactivity/reactive/Array', () => {
128128
expect(fn).toHaveBeenCalledTimes(1)
129129
})
130130

131+
// #2427
132+
test('track length on for ... in iteration', () => {
133+
const array = reactive([1])
134+
let length = ''
135+
effect(() => {
136+
length = ''
137+
for (const key in array) {
138+
length += key
139+
}
140+
})
141+
expect(length).toBe('0')
142+
array.push(1)
143+
expect(length).toBe('01')
144+
})
145+
131146
describe('Array methods w/ refs', () => {
132147
let original: any[]
133148
beforeEach(() => {

packages/reactivity/src/baseHandlers.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ function has(target: object, key: string | symbol): boolean {
179179
}
180180

181181
function ownKeys(target: object): (string | number | symbol)[] {
182-
track(target, TrackOpTypes.ITERATE, ITERATE_KEY)
182+
track(target, TrackOpTypes.ITERATE, isArray(target) ? 'length' : ITERATE_KEY)
183183
return Reflect.ownKeys(target)
184184
}
185185

0 commit comments

Comments
 (0)