#3280·leptos

阻塞资源: `ResponseOptions` 丢失 / 递归的阻塞资源不进行阻塞,而是进行流式传输。

作者: zakstucke创建于 2024年11月23日更新于 2026年6月12日
标签bug

#[component] pub fn App() -> impl IntoView { let outer_r = OnceResource::new_blocking(async move { #[cfg(feature = "ssr")] tokio::time::sleep(std::time::Duration::from_millis(100)).await; Ok::<_, ()>(()) });

let inner_view = move || {
    Suspend::new(async move {
        let _ = outer_r.await;

        view! { <InnerComponent /> }
    })
};

view! {
    <main>
        <Suspense>{inner_view}</Suspense>
    </main>
}

// FOR WORKING CASE, REPLACE THIS APP BODY WITH: `view! { <InnerComponent /> }`

}

#[component] pub fn InnerComponent() -> impl IntoView { let inner_r = OnceResource::new_blocking(async move { let cookie_name = uuid::Uuid::new_v4().to_string().replace("-", "")[0..5].to_string(); let cookie_value = uuid::Uuid::new_v4().to_string().replace("-", "")[0..5].to_string();

    #[cfg(feature = "ssr")]
    tokio::time::sleep(std::time::Duration::from_millis(100)).await;
    let _ = s_set_cookie(cookie_name.clone(), cookie_value.clone()).await;
    (cookie_name, cookie_value)
});

let getter = Action::new(move |(name,): &(String,)| {
    let name = name.clone();
    async move {
        s_get_cookie(name)
            .await
            .unwrap()
            .unwrap_or_else(|| "NO COOKIE SET".to_string())
    }
});

view! {
    <Suspense>
        {move || {
            Suspend::new({
                async move {
                    let (name, value) = inner_r.await;
                    let name = StoredValue::new(name);
                    let value = StoredValue::new(value);
                    view! {
                        <div>

内容来源: leptos-rs/leptos