mirror of
https://github.com/littensy/charm.git
synced 2026-10-21 19:54:09 +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 function listen<T>(selector: () -> T, listener: (state: T, previous: T?, dispose: () -> ()) -> ()): () -> ()
|
||||||
local disposed = false
|
local disposed = false
|
||||||
|
local mounted = true
|
||||||
local current: T?
|
local current: T?
|
||||||
local dispose: () -> ()
|
local dispose: () -> ()
|
||||||
|
|
||||||
|
|
@ -21,6 +22,13 @@ local function listen<T>(selector: () -> T, listener: (state: T, previous: T?, d
|
||||||
dispose = effectScope(function()
|
dispose = effectScope(function()
|
||||||
effect(function()
|
effect(function()
|
||||||
local value = selector()
|
local value = selector()
|
||||||
|
|
||||||
|
if mounted then
|
||||||
|
mounted = false
|
||||||
|
elseif value == current then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
local previous = current
|
local previous = current
|
||||||
current = value
|
current = value
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,17 +8,17 @@ local resumeTracking = signals.resumeTracking
|
||||||
|
|
||||||
local function subscribe<T>(selector: () -> T, listener: (T, T) -> ()): () -> ()
|
local function subscribe<T>(selector: () -> T, listener: (T, T) -> ()): () -> ()
|
||||||
local current: T
|
local current: T
|
||||||
local mount = true
|
local mounted = true
|
||||||
local dispose: () -> ()
|
local dispose: () -> ()
|
||||||
|
|
||||||
dispose = effectScope(function()
|
dispose = effectScope(function()
|
||||||
effect(function()
|
effect(function()
|
||||||
local value = selector()
|
local value = selector()
|
||||||
|
|
||||||
if mount then
|
if mounted then
|
||||||
current = value
|
current = value
|
||||||
mount = false
|
mounted = false
|
||||||
else
|
elseif value ~= current then
|
||||||
local previous = current
|
local previous = current
|
||||||
current = value
|
current = value
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue