解决问题---"响应式数据的改变并不会引起watch的触发"
This commit is contained in:
@@ -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 { queuePreFlushCb } from '@vue/runtime-core'
|
||||
|
||||
@@ -28,7 +28,8 @@ function doWatch(
|
||||
//todo
|
||||
//浅拷贝的形式--指向同样的内存空间
|
||||
const baseGetter = getter
|
||||
getter = () => baseGetter()
|
||||
//等同于将source的属性传进去了
|
||||
getter = () => traverse(baseGetter())
|
||||
}
|
||||
|
||||
let oldValue = {}
|
||||
@@ -58,3 +59,17 @@ function doWatch(
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user