[−][src]Crate yew_state
Location agnostic shared state for yew components.
Usage
Give your component GlobalHandle
properties and wrap it with SharedStateComponent
.
This may be done for any T
that implements Clone
+ Default
.
struct Model { handle: GlobalHandle<T>, } impl Component for Model { type Properties = GlobalHandle<T>; ... } type MyComponent = SharedStateComponent<Model>;
Access current state with state
.
let state: &T = self.handle.state();
Modify shared state from anywhere using reduce
// GlobalHandle<MyAppState> self.handle.reduce(|state| state.user = new_user);
or from a callback with reduce_callback
.
// GlobalHandle<usize> let onclick = self.handle.reduce_callback(|state| *state += 1); html! { <button onclick = onclick>{"+1"}</button> }
reduce_callback_with
provides the fired event.
let oninput = self .handle .reduce_callback_with(|state, i: InputData| state.user.name = i.value); html! { <input type="text" placeholder = "Enter your name" oninput = oninput /> }
Properties with Shared State
Get shared state in custom props with SharedState
.
#[derive(Clone, Properties)] pub struct Props { #[prop_or_default] pub handle: GlobalHandle<AppState>, } impl SharedState for Props { type Handle = GlobalHandle<AppState>; fn handle(&mut self) -> &mut Self::Handle { &mut self.handle } }
State Persistence
Persistent storage requires that T
also implement Serialize
,
Deserialize
, and Storable
.
use serde::{Serialize, Deserialize}; use yew_state::Storable; use yew::services::storage::Area; #[derive(Serialize, Deserialize)] struct T; impl Storable for T { fn key() -> &'static str { "myapp.storage.t" } fn area() -> Area { // or Area::Session Area::Local } }
Then use StorageHandle
instead of GlobalHandle
.
Structs
SharedStateComponent | Wrapper for a component with shared state. |
Enums
Area | An area to keep the data in. |
Traits
Handle | Provides mutable access for wrapper component to update |
SharedState | Allows any |
Storable | Allows state to be stored persistently in local or session storage. |
Type Definitions
GlobalHandle | Handle for basic shared state. |
StorageHandle | Handle for shared state with persistent storage. |