From 209f9b583bb954843cbfa7b62c2c558a4927dbe9 Mon Sep 17 00:00:00 2001 From: littensy <56808540+littensy@users.noreply.github.com> Date: Sat, 3 May 2025 21:17:03 -0700 Subject: [PATCH] fix: check previous value before calling listener --- packages/charm/src/listen.luau | 8 ++++++++ packages/charm/src/subscribe.luau | 8 ++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/charm/src/listen.luau b/packages/charm/src/listen.luau index 56c3deb..9de1d9c 100644 --- a/packages/charm/src/listen.luau +++ b/packages/charm/src/listen.luau @@ -8,6 +8,7 @@ local resumeTracking = signals.resumeTracking local function listen(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(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 diff --git a/packages/charm/src/subscribe.luau b/packages/charm/src/subscribe.luau index 9797d55..9d9e1e6 100644 --- a/packages/charm/src/subscribe.luau +++ b/packages/charm/src/subscribe.luau @@ -8,17 +8,17 @@ local resumeTracking = signals.resumeTracking local function subscribe(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