阻塞资源: `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