解决问题---"响应式数据的改变并不会引起watch的触发"

This commit is contained in:
dj
2026-02-26 12:00:31 +08:00
parent b9a9c52333
commit 164bae388f

View File

@@ -1,4 +1,4 @@
import { EMPTY_OBJ, hasChanged } from '@vue/shared' import { EMPTY_OBJ, hasChanged, isObject } from '@vue/shared'
import { isReactive, ReactiveEffect } from '@vue/reactivity' import { isReactive, ReactiveEffect } from '@vue/reactivity'
import { queuePreFlushCb } from '@vue/runtime-core' import { queuePreFlushCb } from '@vue/runtime-core'
@@ -28,7 +28,8 @@ function doWatch(
//todo //todo
//浅拷贝的形式--指向同样的内存空间 //浅拷贝的形式--指向同样的内存空间
const baseGetter = getter const baseGetter = getter
getter = () => baseGetter() //等同于将source的属性传进去了
getter = () => traverse(baseGetter())
} }
let oldValue = {} let oldValue = {}
@@ -58,3 +59,17 @@ function doWatch(
effect.stop() effect.stop()
} }
} }
/**
* 本质上是拿value, 出发一次getter行为
* @param value
*/
export function traverse(value: unknown) {
if (!isObject(value)) {
return value
}
for (const key in value as object) {
traverse((value as object)[key])
}
return value
}