Deduplicate reactive scope updates/Reset subscriptions on reruns/fix use memo double update (#2506)
* deduplicate effect updates * only subscribe to signals read in the current run of reactive scopes * subscribe to memo reads after recomputing the value
This commit is contained in:
1 parent
24d247dc85
commit
b6dc2a2230
18 files changed
+459
-250
No files matched your search
@@ -1,4 +1,5 @@
|
||||
use crate::{innerlude::SchedulerMsg, Element, Runtime, ScopeId, Task};
|
||||
use generational_box::{AnyStorage, Owner};
|
||||
use rustc_hash::FxHashSet;
|
||||
use std::{
|
||||
any::Any,
|
||||
@@ -91,6 +92,17 @@ impl Scope {
|
||||
})
|
||||
}
|
||||
|
||||
/// Get the owner for the current scope.
|
||||
pub fn owner<S: AnyStorage>(&self) -> Owner<S> {
|
||||
match self.has_context() {
|
||||
Some(rt) => rt,
|
||||
None => {
|
||||
let owner = S::owner();
|
||||
self.provide_context(owner)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Return any context of type T if it exists on this scope
|
||||
pub fn has_context<T: 'static + Clone>(&self) -> Option<T> {
|
||||
self.shared_contexts
|
||||
|
||||
Reference in new issue
Block a user