Skip to content

Commit 97bc30e

Browse files
authored
perf(reactivity): avoid triggering Map.has twice on non-reactive keys (#1972)
1 parent d5c4f6e commit 97bc30e

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

packages/reactivity/__tests__/collections/Map.spec.ts

+11
Original file line numberDiff line numberDiff line change
@@ -436,5 +436,16 @@ describe('reactivity/collections', () => {
436436
map.set('b', 1)
437437
expect(spy).toHaveBeenCalledTimes(3)
438438
})
439+
440+
it('should trigger has only once for non-reactive keys', () => {
441+
const map = new Map()
442+
const spy = jest.fn()
443+
map.has = spy
444+
445+
let proxy = reactive(map)
446+
proxy.has('k')
447+
448+
expect(spy).toBeCalledTimes(1)
449+
})
439450
})
440451
})

packages/reactivity/src/collectionHandlers.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ function has(this: CollectionTypes, key: unknown, isReadonly = false): boolean {
5959
!isReadonly && track(rawTarget, TrackOpTypes.HAS, key)
6060
}
6161
!isReadonly && track(rawTarget, TrackOpTypes.HAS, rawKey)
62-
return target.has(key) || target.has(rawKey)
62+
return key === rawKey
63+
? target.has(key)
64+
: target.has(key) || target.has(rawKey)
6365
}
6466

6567
function size(target: IterableCollections, isReadonly = false) {

0 commit comments

Comments
 (0)