diff --git a/packages/signals/src/global/mod.rs b/packages/signals/src/global/mod.rs index b6fdb4a87..f901d304c 100644 --- a/packages/signals/src/global/mod.rs +++ b/packages/signals/src/global/mod.rs @@ -182,12 +182,20 @@ where let context = get_global_context(); // Get the entry if it already exists + let mut evicted_stale_entry = false; { let read = context.map.borrow(); if let Some(signal) = read.get(&key) { - return signal.downcast_ref::().cloned().unwrap(); + if let Some(signal) = signal.downcast_ref::() { + return signal.clone(); + } + evicted_stale_entry = true; } } + + if evicted_stale_entry { + context.map.borrow_mut().remove(&key); + } // Otherwise, create it // Constructors are always run in the root scope let signal = dioxus_core::Runtime::current().in_scope(ScopeId::ROOT, || {