Use proxy instead of defineProperty

This commit is contained in:
Vadim
2021-10-05 19:33:38 +03:00
parent 04fc80ecec
commit 54e219b883

View File

@@ -85,23 +85,18 @@ export const reactive = (data, watchers, methods, onChange) => {
const { subscribe, notify } = useSubscription()
const { watch, getTarget } = useWatcher()
const _data = {}
Object.keys(data).forEach((key) => {
let currentValue = data[key]
Object.defineProperty(_data, key, {
get() {
subscribe(getTarget(), { key, value: currentValue })
return currentValue
const _data = new Proxy(data, {
get(target, key) {
subscribe(getTarget(), { key, value: target[key] })
return Reflect.get(...arguments)
},
set(newVal) {
currentValue = newVal
onChange && onChange(key, newVal)
set(_, key, value) {
Reflect.set(...arguments)
onChange && onChange(key, value)
notify(_data)
return true
},
})
})
Object.entries(watchers).forEach(([watcherName, watcher]) => {
watch(watcherName, () => watcher(_data))