Tasks

Tasks run side effects on the server during render, or register client-only work for after visibility.

use_task

Alias for use_effect — runs during SSR and re-runs when tracked signals change.

let filter = use_signal("all".into());

use_task(move || {
    let f = filter.get();
    // Sync derived state, logging, etc.
    println!("filter: {f}");
});

use_visible_task

Registers a client-only task in the resumability payload. The runtime executes the JS body after the component becomes visible.

use_visible_task(r#"
    const el = document.querySelector('[data-chart]');
    if (el) initChart(el);
"#);

use_debounce

Debounce signal-driven callbacks — see the Debouncer cookbook for a full search example.

let query = use_signal(String::new());

use_debounce(&query, 300, move |q| {
    if !q.is_empty() {
        println!("search: {q}");
    }
});

Choosing a hook

  • use_task — server-safe effects tied to signals
  • use_visible_task — browser-only initialization (analytics, charts)
  • use_debounce — rate-limit expensive reactions to input