diff --git a/packages/core/src/reactive_context.rs b/packages/core/src/reactive_context.rs index 451d8fe345..1f8ea2b4d0 100644 --- a/packages/core/src/reactive_context.rs +++ b/packages/core/src/reactive_context.rs @@ -311,3 +311,17 @@ struct Inner { // The scope that this reactive context is associated with scope: Option, } + +impl Drop for Inner { + fn drop(&mut self) { + let Some(self_) = self.self_.take() else { + return; + }; + + for subscriber in std::mem::take(&mut self.subscribers) { + if let Ok(mut subscriber) = subscriber.0.lock() { + subscriber.remove(&self_); + } + } + } +}