Added a run macro with useEffect like properties #30
This commit is contained in:
+5
-8
@@ -11,21 +11,18 @@ fn main() -> std::io::Result<()> {
|
|||||||
pub fn app() -> Rsx {
|
pub fn app() -> Rsx {
|
||||||
let items: State<Vec<i32>> = use_state(vec![1, 2]);
|
let items: State<Vec<i32>> = use_state(vec![1, 2]);
|
||||||
|
|
||||||
std::thread::spawn({
|
run! {
|
||||||
let items = items.clone();
|
use items
|
||||||
move || {
|
{
|
||||||
std::thread::sleep(std::time::Duration::from_millis(1000));
|
std::thread::sleep(std::time::Duration::from_millis(300));
|
||||||
items.get().push(3);
|
items.get().push(3);
|
||||||
std::thread::sleep(std::time::Duration::from_millis(1000));
|
|
||||||
items.get().remove(0);
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
rsx! {
|
rsx! {
|
||||||
FlexRow {
|
FlexRow {
|
||||||
for item in items {
|
for item in items {
|
||||||
static "{item}"
|
static "{item}"
|
||||||
static "Idk {item}"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,51 @@ macro_rules! transform {
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Spawns a thread with referencing dependencies.
|
||||||
|
///
|
||||||
|
/// This macro spawns a thread and clones states and either references them or uses them as a dependency.
|
||||||
|
///
|
||||||
|
/// # Example
|
||||||
|
/// ```rust
|
||||||
|
/// let count = use_state(0);
|
||||||
|
/// run! {
|
||||||
|
/// ref count // ref means that it will only reference the count (clone)
|
||||||
|
/// use count // implement count as a dependency, running this again if it updates
|
||||||
|
/// {
|
||||||
|
/// // do something with the count
|
||||||
|
/// }
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! run {
|
||||||
|
($(ref $r:ident)* $(use $d:ident)* $code:block) => {
|
||||||
|
std::thread::spawn({
|
||||||
|
$(let $r = $r.clone();)* $(
|
||||||
|
let $d = $d.clone();
|
||||||
|
$d.add();
|
||||||
|
)*
|
||||||
|
move || {
|
||||||
|
$code
|
||||||
|
loop {
|
||||||
|
$(
|
||||||
|
if $d.check() {
|
||||||
|
$code
|
||||||
|
}
|
||||||
|
)*
|
||||||
|
std::thread::sleep(std::time::Duration::from_millis(50));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
($(ref $r:ident)* $code:block) => {
|
||||||
|
std::thread::spawn({
|
||||||
|
$(let $r = $r.clone();)* $(let $d = $d.clone();)*
|
||||||
|
move || $code
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/// Constructs an `Rsx` tree using declarative syntax.
|
/// Constructs an `Rsx` tree using declarative syntax.
|
||||||
///
|
///
|
||||||
/// This macro is similar to JSX in UI frameworks, allowing you to nest widgets and assign components or dependencies.
|
/// This macro is similar to JSX in UI frameworks, allowing you to nest widgets and assign components or dependencies.
|
||||||
|
|||||||
Reference in New Issue
Block a user