Skip to content

Commit 6e46a57

Browse files
authored
fix(reactivity): ensure add/set on reactive collections return the proxy (#2534)
fix #2530
1 parent 0ff2a4f commit 6e46a57

File tree

5 files changed

+27
-4
lines changed

5 files changed

+27
-4
lines changed

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

+6
Original file line numberDiff line numberDiff line change
@@ -467,5 +467,11 @@ describe('reactivity/collections', () => {
467467
proxy.clear()
468468
expect(spy).toBeCalledTimes(1)
469469
})
470+
471+
it('should return proxy from Map.set call', () => {
472+
const map = reactive(new Map())
473+
const result = map.set('a', 'a')
474+
expect(result).toBe(map)
475+
})
470476
})
471477
})

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

+6
Original file line numberDiff line numberDiff line change
@@ -454,5 +454,11 @@ describe('reactivity/collections', () => {
454454
proxy.clear()
455455
expect(spy).toBeCalledTimes(1)
456456
})
457+
458+
it('should return proxy from Set.add call', () => {
459+
const set = reactive(new Set())
460+
const result = set.add('a')
461+
expect(result).toBe(set)
462+
})
457463
})
458464
})

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

+5
Original file line numberDiff line numberDiff line change
@@ -133,5 +133,10 @@ describe('reactivity/collections', () => {
133133
map.set(key, NaN)
134134
expect(mapSpy).toHaveBeenCalledTimes(1)
135135
})
136+
it('should return proxy from WeakMap.set call', () => {
137+
const map = reactive(new WeakMap())
138+
const result = map.set({}, 'a')
139+
expect(result).toBe(map)
140+
})
136141
})
137142
})

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

+6
Original file line numberDiff line numberDiff line change
@@ -99,5 +99,11 @@ describe('reactivity/collections', () => {
9999
expect(observed.has(value)).toBe(true)
100100
expect(set.has(value)).toBe(false)
101101
})
102+
103+
it('should return proxy from WeakSet.add call', () => {
104+
const set = reactive(new WeakSet())
105+
const result = set.add({})
106+
expect(result).toBe(set)
107+
})
102108
})
103109
})

packages/reactivity/src/collectionHandlers.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -76,11 +76,11 @@ function add(this: SetTypes, value: unknown) {
7676
const target = toRaw(this)
7777
const proto = getProto(target)
7878
const hadKey = proto.has.call(target, value)
79-
const result = target.add(value)
79+
target.add(value)
8080
if (!hadKey) {
8181
trigger(target, TriggerOpTypes.ADD, value, value)
8282
}
83-
return result
83+
return this
8484
}
8585

8686
function set(this: MapTypes, key: unknown, value: unknown) {
@@ -97,13 +97,13 @@ function set(this: MapTypes, key: unknown, value: unknown) {
9797
}
9898

9999
const oldValue = get.call(target, key)
100-
const result = target.set(key, value)
100+
target.set(key, value)
101101
if (!hadKey) {
102102
trigger(target, TriggerOpTypes.ADD, key, value)
103103
} else if (hasChanged(value, oldValue)) {
104104
trigger(target, TriggerOpTypes.SET, key, value, oldValue)
105105
}
106-
return result
106+
return this
107107
}
108108

109109
function deleteEntry(this: CollectionTypes, key: unknown) {

0 commit comments

Comments
 (0)