解决问题---"响应式数据的改变并不会引起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 { 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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user