refactor(reactivity): refactor iteration key trigger logic + use more robust Map/Set check

This commit is contained in:
Evan You
2020-09-14 11:26:34 -04:00
parent cf1b6c666f
commit 0124eacc91
5 changed files with 48 additions and 28 deletions

View File

@@ -16,7 +16,9 @@ import {
isString,
hasChanged,
NOOP,
remove
remove,
isMap,
isSet
} from '@vue/shared'
import {
currentInstance,
@@ -335,12 +337,12 @@ function traverse(value: unknown, seen: Set<unknown> = new Set()) {
for (let i = 0; i < value.length; i++) {
traverse(value[i], seen)
}
} else if (value instanceof Map) {
value.forEach((v, key) => {
} else if (isMap(value)) {
value.forEach((_, key) => {
// to register mutation dep for existing keys
traverse(value.get(key), seen)
})
} else if (value instanceof Set) {
} else if (isSet(value)) {
value.forEach(v => {
traverse(v, seen)
})