|
@@ -50,9 +50,11 @@ pub fn use_signal<T: 'static>(cx: &ScopeState, f: impl FnOnce() -> T) -> Signal<
|
|
#[derive(Clone)]
|
|
#[derive(Clone)]
|
|
struct Unsubscriber {
|
|
struct Unsubscriber {
|
|
scope: ScopeId,
|
|
scope: ScopeId,
|
|
- subscribers: Rc<RefCell<Vec<Rc<RefCell<Vec<ScopeId>>>>>>,
|
|
|
|
|
|
+ subscribers: UnsubscriberArray,
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+type UnsubscriberArray = Rc<RefCell<Vec<Rc<RefCell<Vec<ScopeId>>>>>>;
|
|
|
|
+
|
|
impl Drop for Unsubscriber {
|
|
impl Drop for Unsubscriber {
|
|
fn drop(&mut self) {
|
|
fn drop(&mut self) {
|
|
for subscribers in self.subscribers.borrow().iter() {
|
|
for subscribers in self.subscribers.borrow().iter() {
|
|
@@ -269,10 +271,7 @@ impl<'a, T: 'static, I: 'static> Write<'a, T, I> {
|
|
) -> Option<Write<'a, O, I>> {
|
|
) -> Option<Write<'a, O, I>> {
|
|
let Self { write, signal } = myself;
|
|
let Self { write, signal } = myself;
|
|
let write = RefMut::filter_map(write, f).ok();
|
|
let write = RefMut::filter_map(write, f).ok();
|
|
- write.map(|write| Write {
|
|
|
|
- write,
|
|
|
|
- signal: signal,
|
|
|
|
- })
|
|
|
|
|
|
+ write.map(|write| Write { write, signal })
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -280,13 +279,13 @@ impl<'a, T: 'static> Deref for Write<'a, T> {
|
|
type Target = T;
|
|
type Target = T;
|
|
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
fn deref(&self) -> &Self::Target {
|
|
- &*self.write
|
|
|
|
|
|
+ &self.write
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
impl<T> DerefMut for Write<'_, T> {
|
|
impl<T> DerefMut for Write<'_, T> {
|
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
fn deref_mut(&mut self) -> &mut Self::Target {
|
|
- &mut *self.write
|
|
|
|
|
|
+ &mut self.write
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|