Browse Source

add DirtyAll to SchedulerMsg

Evan Almloff 3 years ago
parent
commit
fe5c698c09
2 changed files with 10 additions and 4 deletions
  1. 8 0
      packages/core/src/virtual_dom.rs
  2. 2 4
      packages/rsx_interpreter/src/lib.rs

+ 8 - 0
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);
+                }
+            }
         }
     }
 

+ 2 - 4
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()
         }
     }