diff --git a/examples/iter.rs b/examples/iter.rs index 230f030..c61589b 100644 --- a/examples/iter.rs +++ b/examples/iter.rs @@ -10,12 +10,12 @@ fn main() -> std::io::Result<()> { pub fn app() -> Rsx { let items: State> = use_state(vec![1, 2]); + let count = use_state(3); run! { - use items - { - std::thread::sleep(std::time::Duration::from_millis(300)); - items.get().push(3); + use count ref items { + items.get().push(count.get_dl()); + **count.get() += 1; } } diff --git a/src/macros.rs b/src/macros.rs index d47c0ad..1978443 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -206,32 +206,35 @@ macro_rules! transform { /// ``` #[macro_export] macro_rules! run { - ($(ref $r:ident)* $(use $d:ident)* $code:block) => { + (use $($d:ident),+ $(ref $($r:ident),+)? $code:block) => { std::thread::spawn({ - $(let $r = $r.clone();)* $( - let $d = $d.clone(); - $d.add(); - )* + $(let $d = $d.clone();)+ + $($(let $r = $r.clone();)+)? move || { + $($d.add();)+ $code loop { $( - if $d.check() { - $code - } - )* + if $d.check() $code + )+ std::thread::sleep(std::time::Duration::from_millis(50)); } } }); }; - ($(ref $r:ident)* $code:block) => { + (ref $($r:ident),+ $code:block) => { std::thread::spawn({ - $(let $r = $r.clone();)* $(let $d = $d.clone();)* + $(let $r = $r.clone();)+ move || $code }); }; + + ($($code:tt)*) => { + std::thread::spawn({ + move || {$($code)*} + }); + }; } /// Constructs an `Rsx` tree using declarative syntax.