mirror of
https://github.com/littensy/charm.git
synced 2026-10-20 17:51:37 +00:00
fix: check previous value before calling listener
This commit is contained in:
parent
a0fc88ede1
commit
209f9b583b
2 changed files with 12 additions and 4 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue