Loaders
#[load] handlers fetch server data before a page renders — the Flow equivalent of route loaders.
Define a loader
#[derive(Clone, Serialize, Deserialize)]
struct HomeData {
title: String,
}
#[load]
async fn home(req: &FlowRequest) -> HomeData {
HomeData { title: "Welcome".into() }
}Consume in pages
pub fn page(_req: FlowRequest) -> View {
let data = use_home_load();
view! {
<h1>{data.title.clone()}</h1>
}
}With try_use_load
pub fn page(_req: FlowRequest) -> View {
let data = match try_use_load::<HomeData>("home") {
Ok(d) => d,
Err(e) => return error_page(&FlowError::Loader(e)),
};
view! { <h1>{data.title.clone()}</h1> }
}LoadValue
LoadValue::Ok(T)— data readyLoadValue::Err(LoaderError)— loader failedLoadValue::Pending— deferred streaming (see Streaming)
FlowRequest access
#[load]
async fn profile(req: &FlowRequest) -> ProfileData {
let id = req.param("id").unwrap_or("0");
db::profile(id).await
}