mirror of
https://github.com/DioxusLabs/dioxus
synced 2024-11-24 05:03:06 +00:00
32 lines
1,008 B
Rust
32 lines
1,008 B
Rust
|
// https://jakelazaroff.com/words/were-react-hooks-a-mistake/
|
||
|
use dioxus::prelude::*;
|
||
|
|
||
|
fn main() {
|
||
|
dioxus_web::launch(app);
|
||
|
}
|
||
|
|
||
|
fn app(cx: Scope) -> Element {
|
||
|
let count = use_ref(cx, || 0);
|
||
|
let started = use_state(cx, || false);
|
||
|
|
||
|
let start = move || {
|
||
|
if !*started.get() {
|
||
|
let count = count.clone(); // clone reference rather than value
|
||
|
let alert = move || gloo_dialogs::alert(&format!("Your score was {}!", count.read()));
|
||
|
gloo_timers::callback::Timeout::new(5_000, alert).forget();
|
||
|
}
|
||
|
started.set(true); // this cannot be done inside condition or infinite loop
|
||
|
};
|
||
|
|
||
|
cx.render(rsx! {
|
||
|
button {
|
||
|
onclick: move |_event| {
|
||
|
start();
|
||
|
*count.write() += 1;
|
||
|
},
|
||
|
// format is needed as {count} does not seemed to work in `if` within content
|
||
|
if **started { format!("Current score: {}", count.write()) } else { "Start".to_string() }
|
||
|
}
|
||
|
})
|
||
|
}
|