From 54e219b8831e19b182c5d2fb046280563b18e091 Mon Sep 17 00:00:00 2001 From: Vadim Date: Tue, 5 Oct 2021 19:33:38 +0300 Subject: [PATCH] Use proxy instead of defineProperty --- src/components/Carousel/reactive.js | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/components/Carousel/reactive.js b/src/components/Carousel/reactive.js index cfab51f..ea8c2a7 100644 --- a/src/components/Carousel/reactive.js +++ b/src/components/Carousel/reactive.js @@ -85,22 +85,17 @@ 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 - }, - set(newVal) { - currentValue = newVal - onChange && onChange(key, newVal) - notify(_data) - }, - }) + const _data = new Proxy(data, { + get(target, key) { + subscribe(getTarget(), { key, value: target[key] }) + return Reflect.get(...arguments) + }, + set(_, key, value) { + Reflect.set(...arguments) + onChange && onChange(key, value) + notify(_data) + return true + }, }) Object.entries(watchers).forEach(([watcherName, watcher]) => {