From bc23716280631751b6b1444109b66678a0391e6a Mon Sep 17 00:00:00 2001 From: natxocc Date: Mon, 13 Apr 2026 18:00:52 +0200 Subject: [PATCH] Solve 1 bug more --- sigpro2.js | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/sigpro2.js b/sigpro2.js index 7ef533b..c61a492 100644 --- a/sigpro2.js +++ b/sigpro2.js @@ -325,7 +325,10 @@ const Render = renderFn => { try { processResult(renderFn({ onCleanup: fn => cleanups.add(fn) })) - } finally { activeOwner = previousOwner } + } finally { + activeOwner = previousOwner + activeEffect = previousEffect + } mounts.forEach(fn => fn()) return { @@ -455,16 +458,19 @@ const Mount = (comp, target) => { const set = (signal, path, value) => { if (value === undefined) { - signal(isFunc(path) ? path(signal()) : path); - } else { - const keys = path.split('.'); - const last = keys.pop(); - const current = signal(); - const obj = keys.reduce((o, k) => ({ ...o, [k]: { ...o[k] } }), { ...current }); - obj[last] = value; - signal(obj); + signal(isFunc(path) ? path(signal()) : path) + return } -}; + const keys = path.split('.') + const last = keys.pop() + const current = signal() + const root = { ...current } + let acc = root + for (const k of keys) acc = acc[k] = { ...acc[k] } + acc[last] = value + + signal(root) +} const SigPro = Object.freeze({ $, Watch, Tag, Render, If, For, Router, Mount, onMount, onUnmount, set })