From 2034591ab3025524fc2aec6517c90ac74245d4a3 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 31 Jan 2024 15:40:39 -0600 Subject: [PATCH] fix the incremental feature on the router --- packages/router/Cargo.toml | 2 +- packages/router/src/incremental.rs | 21 ++++++++++++++------- packages/router/src/router_cfg.rs | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/router/Cargo.toml b/packages/router/Cargo.toml index 8749750d5..e9e2e4eb8 100644 --- a/packages/router/Cargo.toml +++ b/packages/router/Cargo.toml @@ -32,7 +32,7 @@ dioxus-cli-config = { workspace = true } [features] default = [] -ssr = ["dioxus-ssr", "tokio"] +ssr = ["dioxus-ssr/incremental", "tokio", "dioxus-fullstack?/ssr"] liveview = ["dioxus-liveview", "tokio", "dep:serde", "serde_json"] wasm_test = [] serde = ["dep:serde", "gloo-utils?/serde"] diff --git a/packages/router/src/incremental.rs b/packages/router/src/incremental.rs index 38b7a5bda..c6a9b9da7 100644 --- a/packages/router/src/incremental.rs +++ b/packages/router/src/incremental.rs @@ -3,7 +3,7 @@ use core::pin::Pin; use std::future::Future; use std::str::FromStr; -use dioxus::prelude::*; +use dioxus_lib::prelude::*; use dioxus_ssr::incremental::{ IncrementalRenderer, IncrementalRendererError, RenderFreshness, WrapBody, }; @@ -50,7 +50,7 @@ where &mut tokio::io::sink(), |vdom| { Box::pin(async move { - let _ = vdom.rebuild(); + vdom.rebuild_in_place(); vdom.wait_for_suspense().await; }) }, @@ -87,13 +87,21 @@ where ::Err: std::fmt::Display, W: tokio::io::AsyncWrite + Unpin + Send, { - #[component] - fn RenderPath(path: R) -> Element + #[derive(Clone)] + struct RootProps(Rt); + + impl PartialEq for RootProps { + fn eq(&self, _: &Self) -> bool { + true + } + } + + fn RenderPath(props: RootProps) -> Element where R: Routable, ::Err: std::fmt::Display, { - let path = path.clone(); + let path = props.0; rsx! { Router:: { config: || RouterConfig::default().history(MemoryHistory::with_initial_path(path)) @@ -104,8 +112,7 @@ where renderer .render( route.to_string(), - RenderPath, - RenderPathProps { path: route }, + || VirtualDom::new_with_props(RenderPath, RootProps(route)), writer, modify_vdom, wrapper, diff --git a/packages/router/src/router_cfg.rs b/packages/router/src/router_cfg.rs index 6dd6ca513..e592aa841 100644 --- a/packages/router/src/router_cfg.rs +++ b/packages/router/src/router_cfg.rs @@ -54,7 +54,7 @@ macro_rules! default_history { return Box::new(AnyHistoryProviderImplWrapper::new(WebHistory::::default())); // If we are using dioxus fullstack and the ssr feature is enabled, use the memory history with the initial path set to the current path in fullstack #[cfg(all(feature = "fullstack", feature = "ssr"))] - return dioxus_router::prelude::MemoryHistory::with_initial_path( + return MemoryHistory::with_initial_path( dioxus_fullstack::prelude::server_context() .request_parts() .unwrap()