Crates.io | yew-api-hook |
lib.rs | yew-api-hook |
version | 0.3.0 |
source | src |
created_at | 2023-01-10 13:47:16.327136 |
updated_at | 2023-01-21 11:36:14.53063 |
description | Use asynchronous api requests in conjunction with yew's suspense feature |
homepage | https://github.com/mara214/yew-api-hook |
repository | https://github.com/mara214/yew-api-hook.git |
max_upload_size | |
id | 755334 |
size | 20,440 |
Use asynchronous api requests in conjunction with yew's suspense feature
#[function_component]
fn App() -> Html {
html! {
<Suspense fallback={html! { {"Loading.."} }}>
<AsyncComponent />
</Suspense>
}
}
#[function_component]
fn AsyncComponent() -> HtmlResult {
let data = use_api(requests::Fetch { id: 0 })?;
match data {
Ok(json) => Ok(html! { {format!("{:#?}", json)} }),
Err(_) => Ok(html! { {"An error occured"} })
}
}
mod requests {
use yew_api_hook::prelude::*;
type ApiResult = anyhow::Result<serde_json::Value>;
#[derive(Clone, Debug, PartialEq)]
pub struct Fetch {
pub id: u64
}
#[async_trait(?Send)]
impl Request for Fetch {
type Error = anyhow::Error;
type Output = serde_json::Value;
async fn run(&self) -> ApiResult {
// Use your favorite http or whatever implementation
get(format!("/entity/{}", self.id)).await
}
}
}