fix(reactivity): Map/Set identity methods should work even if raw value contains reactive entries

fix #799
This commit is contained in:
Evan You
2020-03-06 11:10:02 -05:00
parent 16f9e63951
commit cc69fd72e3
5 changed files with 63 additions and 13 deletions

View File

@@ -348,5 +348,19 @@ describe('reactivity/collections', () => {
map.set('foo', NaN)
expect(mapSpy).toHaveBeenCalledTimes(1)
})
it('should work with reactive keys in raw map', () => {
const raw = new Map()
const key = reactive({})
raw.set(key, 1)
const map = reactive(raw)
expect(map.has(key)).toBe(true)
expect(map.get(key)).toBe(1)
expect(map.delete(key)).toBe(true)
expect(map.has(key)).toBe(false)
expect(map.get(key)).toBeUndefined()
})
})
})

View File

@@ -368,5 +368,17 @@ describe('reactivity/collections', () => {
})
expect(dummy).toBe(2)
})
it('should work with reactive entries in raw set', () => {
const raw = new Set()
const entry = reactive({})
raw.add(entry)
const set = reactive(raw)
expect(set.has(entry)).toBe(true)
expect(set.delete(entry)).toBe(true)
expect(set.has(entry)).toBe(false)
})
})
})

View File

@@ -67,6 +67,14 @@ describe('reactivity/reactive/Array', () => {
expect(arr.lastIndexOf(observed, 1)).toBe(-1)
})
test('Array identity methods should work if raw value contains reactive objects', () => {
const raw = []
const obj = reactive({})
raw.push(obj)
const arr = reactive(raw)
expect(arr.includes(obj)).toBe(true)
})
test('Array identity methods should be reactive', () => {
const obj = {}
const arr = reactive([obj, {}])