Add into_vnode temporary logic for more things

This commit adjusts how rsx! works, making it more forgiving with signals.

Notably, we add the temporaries to if chains too.
This commit is contained in:
Jonathan Kelley committed 2023-10-17 15:42:21 -07:00
1 parent 55ad41b392
commit e819702fc5
3 files changed
+23 -10

No files matched your search

+11 -2
View File
@@ -8,8 +8,10 @@ fn main() {
fn app(cx: Scope) -> Element {
let running = dioxus_signals::use_signal(cx, || true);
let mut count = dioxus_signals::use_signal(cx, || 0);
let saved_values = dioxus_signals::use_signal(cx, || vec![0]);
let saved_values = dioxus_signals::use_signal(cx, || vec![0.to_string()]);
// Signals can be used in async functions without an explicit clone since they're 'static and Copy
// Signals are backed by a runtime that is designed to deeply integrate with Dioxus apps
use_future!(cx, || async move {
loop {
if running.value() {
@@ -24,7 +26,7 @@ fn app(cx: Scope) -> Element {
button { onclick: move |_| count += 1, "Up high!" }
button { onclick: move |_| count -= 1, "Down low!" }
button { onclick: move |_| running.toggle(), "Toggle counter" }
button { onclick: move |_| saved_values.push(count.value()), "Save this value" }
button { onclick: move |_| saved_values.push(count.value().to_string()), "Save this value" }
// We can do boolean operations on the current signal value
if count.value() > 5 {
@@ -35,5 +37,12 @@ fn app(cx: Scope) -> Element {
for value in saved_values.read().iter() {
h3 { "Saved value: {value}" }
}
// We can also use the signal value as a slice
if let &[ref first, .., ref last] = saved_values.read().as_slice() {
rsx! { li { "single element: {first}, {last}" } }
} else {
rsx! { "No saved values" }
}
})
}