fix: subscription should apply internally to hook

This commit is contained in:
Jonathan Kelley committed 2022-04-24 20:51:52 -04:00
1 parent 70a6f95c8c
commit 07529e491c
2 files changed
+29 -14

No files matched your search

+2 -1
View File
@@ -47,7 +47,8 @@ fn ChildWithRef(cx: Scope) -> Element {
cx.spawn(async move { cx.spawn(async move {
names.write().push("asd".to_string()); names.write().push("asd".to_string());
}) })
} },
"Add name"
} }
} }
}) })
+27 -13
View File
@@ -16,15 +16,35 @@ use std::{
pub fn use_atom_ref<T: 'static>(cx: &ScopeState, atom: AtomRef<T>) -> &UseAtomRef<T> { pub fn use_atom_ref<T: 'static>(cx: &ScopeState, atom: AtomRef<T>) -> &UseAtomRef<T> {
let root = use_atom_root(cx); let root = use_atom_root(cx);
cx.use_hook(|_| { &cx.use_hook(|_| {
root.initialize(atom); root.initialize(atom);
UseAtomRef { (
ptr: atom.unique_id(), UseAtomRef {
root: root.clone(), ptr: atom.unique_id(),
scope_id: cx.scope_id(), root: root.clone(),
value: root.register(atom, cx.scope_id()), scope_id: cx.scope_id(),
} value: root.register(atom, cx.scope_id()),
},
AtomRefSubscription {
ptr: atom.unique_id(),
root: root.clone(),
scope_id: cx.scope_id(),
},
)
}) })
.0
}
pub struct AtomRefSubscription {
ptr: AtomId,
root: Rc<AtomRoot>,
scope_id: ScopeId,
}
impl Drop for AtomRefSubscription {
fn drop(&mut self) {
self.root.unsubscribe(self.ptr, self.scope_id)
}
} }
pub struct UseAtomRef<T> { pub struct UseAtomRef<T> {
@@ -65,9 +85,3 @@ impl<T: 'static> UseAtomRef<T> {
self.root.set(self.ptr, new); self.root.set(self.ptr, new);
} }
} }
impl<T> Drop for UseAtomRef<T> {
fn drop(&mut self) {
self.root.unsubscribe(self.ptr, self.scope_id)
}
}