Effects
Derived state and side effects. Use macros for client replay; plain functions for SSR-only work.
computed! — client + SSR
let first = use_signal("Ada".into());
let last = use_signal("Lovelace".into());
let full_name = computed!([first, last], move || {
format!("{} {}", first.get(), last.get())
});
view! { <p>{full_name}</p> }effect! — client side effects
let query = use_signal(String::new());
effect!([query], move || {
let q = query.get();
// Runs on SSR and replays in the browser when query changes
println!("query changed: {q}");
});use_effect / use_computed — SSR only
Plain use_effect() and use_computed() run during server render. For browser replay, use computed! and effect! (rs2js-translated).
debounce!
let search = use_signal(String::new());
debounce!([search], 300, move || {
// Fires 300ms after search stops changing (client + SSR)
});