mirror of
https://github.com/zaphar/sycamore-state.git
synced 2025-07-25 21:00:17 -04:00
Abstract away the effect wiring
This commit is contained in:
parent
481f0cac95
commit
b282d07983
@ -52,6 +52,13 @@ where
|
|||||||
pub fn signal(&'ctx self) -> &'ctx ReadSignal<T> {
|
pub fn signal(&'ctx self) -> &'ctx ReadSignal<T> {
|
||||||
self.signal
|
self.signal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn bind<F>(&'ctx self, cx: Scope<'ctx>, f: F)
|
||||||
|
where
|
||||||
|
F: Fn() -> Msg + 'ctx,
|
||||||
|
{
|
||||||
|
create_effect(cx, move || self.dispatch(f()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -65,10 +65,7 @@ fn test_state_effect_flow() {
|
|||||||
create_child_scope(cx, |cx| {
|
create_child_scope(cx, |cx| {
|
||||||
let form_val = create_signal(cx, reducer.signal().get_untracked().value_one.clone());
|
let form_val = create_signal(cx, reducer.signal().get_untracked().value_one.clone());
|
||||||
|
|
||||||
create_effect(cx, move || {
|
reducer.bind(cx, || Msg::UpdateOne((*form_val.get()).clone()));
|
||||||
let new_val = form_val.get();
|
|
||||||
reducer.dispatch(Msg::UpdateOne((*new_val).clone()))
|
|
||||||
});
|
|
||||||
|
|
||||||
form_val.set("bar".to_owned());
|
form_val.set("bar".to_owned());
|
||||||
|
|
||||||
@ -77,11 +74,7 @@ fn test_state_effect_flow() {
|
|||||||
create_child_scope(cx, |cx| {
|
create_child_scope(cx, |cx| {
|
||||||
let form_val = create_signal(cx, 0);
|
let form_val = create_signal(cx, 0);
|
||||||
|
|
||||||
create_effect(cx, move || {
|
reducer.bind(cx, || Msg::UpdateTwo(*form_val.get()));
|
||||||
let new_val = form_val.get();
|
|
||||||
reducer.dispatch(Msg::UpdateTwo(*new_val))
|
|
||||||
});
|
|
||||||
|
|
||||||
form_val.set(1);
|
form_val.set(1);
|
||||||
assert_eq!(reducer.signal().get_untracked().value_two, 1);
|
assert_eq!(reducer.signal().get_untracked().value_two, 1);
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user