diff --git a/packages/core/src/virtual_dom.rs b/packages/core/src/virtual_dom.rs index 8d3fd1789..3614eed00 100644 --- a/packages/core/src/virtual_dom.rs +++ b/packages/core/src/virtual_dom.rs @@ -125,6 +125,9 @@ pub enum SchedulerMsg { /// Immediate updates from Components that mark them as dirty Immediate(ScopeId), + /// Mark all components as dirty and update them + DirtyAll, + /// New tasks from components that should be polled when the next poll is ready NewTask(ScopeId), } @@ -407,6 +410,11 @@ impl VirtualDom { SchedulerMsg::Immediate(s) => { self.dirty_scopes.insert(s); } + SchedulerMsg::DirtyAll => { + for id in self.scopes.scopes.borrow().keys() { + self.dirty_scopes.insert(*id); + } + } } } diff --git a/packages/rsx_interpreter/src/lib.rs b/packages/rsx_interpreter/src/lib.rs index 2fa4896a9..922ab3acd 100644 --- a/packages/rsx_interpreter/src/lib.rs +++ b/packages/rsx_interpreter/src/lib.rs @@ -1,5 +1,5 @@ use captuered_context::CapturedContext; -use dioxus_core::{NodeFactory, SchedulerMsg, ScopeId, VNode}; +use dioxus_core::{NodeFactory, SchedulerMsg, VNode}; use dioxus_hooks::UnboundedSender; use error::Error; use interperter::build; @@ -108,9 +108,7 @@ impl RsxContext { let mut write = self.data.write().unwrap(); write.hm.insert(loc, text); if let Some(channel) = &mut write.scheduler_channel { - channel - .unbounded_send(SchedulerMsg::Immediate(ScopeId(0))) - .unwrap() + channel.unbounded_send(SchedulerMsg::DirtyAll).unwrap() } }