mirror of
https://github.com/zaphar/sycamore-state.git
synced 2025-07-22 20:29:50 -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> {
|
||||
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)]
|
||||
|
@ -65,10 +65,7 @@ fn test_state_effect_flow() {
|
||||
create_child_scope(cx, |cx| {
|
||||
let form_val = create_signal(cx, reducer.signal().get_untracked().value_one.clone());
|
||||
|
||||
create_effect(cx, move || {
|
||||
let new_val = form_val.get();
|
||||
reducer.dispatch(Msg::UpdateOne((*new_val).clone()))
|
||||
});
|
||||
reducer.bind(cx, || Msg::UpdateOne((*form_val.get()).clone()));
|
||||
|
||||
form_val.set("bar".to_owned());
|
||||
|
||||
@ -77,11 +74,7 @@ fn test_state_effect_flow() {
|
||||
create_child_scope(cx, |cx| {
|
||||
let form_val = create_signal(cx, 0);
|
||||
|
||||
create_effect(cx, move || {
|
||||
let new_val = form_val.get();
|
||||
reducer.dispatch(Msg::UpdateTwo(*new_val))
|
||||
});
|
||||
|
||||
reducer.bind(cx, || Msg::UpdateTwo(*form_val.get()));
|
||||
form_val.set(1);
|
||||
assert_eq!(reducer.signal().get_untracked().value_two, 1);
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user