diff --git a/src/reactivity.ts b/src/reactivity.ts index 684b8dbb..2a564be9 100644 --- a/src/reactivity.ts +++ b/src/reactivity.ts @@ -49,6 +49,10 @@ function observeTargetKey(target: Target, key: ObjectKey, callback: Callback): v keyToCallbacks.set(key, new Set()); } keyToCallbacks.get(key)!.add(callback); + if (!callbacksToTargets.has(callback)) { + callbacksToTargets.set(callback, new Set()); + } + callbacksToTargets.get(callback)!.add(target); } /** * Notify Reactives that are observing a given target that a key has changed on @@ -95,9 +99,10 @@ function clearReactivesForCallback(callback: Callback): void { callbacks.delete(callback); } } + targetsToClear.clear(); } -const reactiveCache = new WeakMap>(); +const reactiveCache = new WeakMap>(); /** * Creates a reactive proxy for an object. Reading data on the reactive object * subscribes to changes to the data. Writing data on the object will cause the @@ -182,10 +187,6 @@ export function reactive(target: T, callback: Callback): React }, }); reactivesForTarget.set(callback, proxy); - if (!callbacksToTargets.has(callback)) { - callbacksToTargets.set(callback, new Set()); - } - callbacksToTargets.get(callback)!.add(target); } return reactivesForTarget.get(callback) as Reactive; }