#yew #hook #api-request #api #asynchronous

yew-api-hook

结合yew的suspense功能使用异步API请求

3个版本 (重大更改)

0.3.0 2023年1月21日
0.2.0 2023年1月15日
0.1.0 2023年1月10日

#1205 in WebAssembly

每月22次下载

MIT许可证

20KB
397

crates.io docs

Yew API Hook

结合yew的suspense功能使用异步API请求

用法

#[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
        }
    }
}

依赖项

~11–15MB
~262K SLoC