Store
Stores wrap structured reactive state — mutations go through update or set, and the whole object serializes as one payload blob.
LIVE
use_store
use_store
#[data]
struct User {
name: String,
email: String,
}
let user = use_store(User {
name: "Ada".into(),
email: "ada@example.com".into(),
});
user.update(|u| u.name = "Augusta".into());
user.set(User { name: "New".into(), email: u.email.clone() });#[derive(Store)]
Generate typed field accessors on Store<T> (1.0+):
#[derive(Store)]
#[data]
struct Cart {
items: u32,
total_cents: u64,
}
let cart = use_store(Cart { items: 0, total_cents: 0 });
cart.set_items(2);
cart.update(|c| c.total_cents += 500);In templates
view! {
<p>{user.signal()}</p>
<input value={user.get().name.clone()} />
}NoSerialize
Mark fields that must not cross the resumability boundary — handles, callbacks, or non-serializable server state.
#[data]
struct AppState {
pub count: u32,
#[serde(skip)]
pub db: NoSerialize<DbPool>,
}Store vs Signal
Use signal for scalar values. Use use_store when you have structured objects with multiple fields that update together.