fix: check previous value before calling listener

This commit is contained in:
littensy 2025-05-03 21:17:03 -07:00
parent a0fc88ede1
commit 209f9b583b
2 changed files with 12 additions and 4 deletions

View file

@ -8,6 +8,7 @@ local resumeTracking = signals.resumeTracking
local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, dispose: () -> ()) -> ()): () -> ()
local disposed = false
local mounted = true
local current: T?
local dispose: () -> ()
@ -21,6 +22,13 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
dispose = effectScope(function()
effect(function()
local value = selector()
if mounted then
mounted = false
elseif value == current then
return
end
local previous = current
current = value

View file

@ -8,17 +8,17 @@ local resumeTracking = signals.resumeTracking
local function subscribe<T>(selector: () -> T, listener: (T, T) -> ()): () -> ()
local current: T
local mount = true
local mounted = true
local dispose: () -> ()
dispose = effectScope(function()
effect(function()
local value = selector()
if mount then
if mounted then
current = value
mount = false
else
mounted = false
elseif value ~= current then
local previous = current
current = value