Abstract away the effect wiring

This commit is contained in:
Jeremy Wall 2022-12-26 16:23:19 -05:00
parent 481f0cac95
commit b282d07983
2 changed files with 9 additions and 9 deletions

View File

@ -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)]

View File

@ -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);
});