From b282d0798329d05dc922eee03560aeccb484d5e7 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Mon, 26 Dec 2022 16:23:19 -0500 Subject: [PATCH] Abstract away the effect wiring --- src/lib.rs | 7 +++++++ src/tests/mod.rs | 11 ++--------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index fe388f9..ab24ac9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -52,6 +52,13 @@ where pub fn signal(&'ctx self) -> &'ctx ReadSignal { self.signal } + + pub fn bind(&'ctx self, cx: Scope<'ctx>, f: F) + where + F: Fn() -> Msg + 'ctx, + { + create_effect(cx, move || self.dispatch(f())); + } } #[cfg(test)] diff --git a/src/tests/mod.rs b/src/tests/mod.rs index 9155050..9ed9fb9 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -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); });