فهرست منبع

fix routers without an index route (#2477)

Evan Almloff 1 سال پیش
والد
کامیت
862534d695
3فایلهای تغییر یافته به همراه49 افزوده شده و 6 حذف شده
  1. 7 6
      packages/router/src/router_cfg.rs
  2. 1 0
      packages/router/tests/via_ssr/main.rs
  3. 41 0
      packages/router/tests/via_ssr/without_index.rs

+ 7 - 6
packages/router/src/router_cfg.rs

@@ -17,7 +17,7 @@ use std::sync::Arc;
 ///     #[route("/")]
 ///     Index {},
 /// }
-/// let cfg = RouterConfig::default().history(WebHistory::<Route>::default());
+/// let cfg = RouterConfig::default().history(MemoryHistory::<Route>::default());
 /// ```
 pub struct RouterConfig<R: Routable> {
     pub(crate) failure_external_navigation: fn() -> Element,
@@ -46,13 +46,14 @@ where
     <R as std::str::FromStr>::Err: std::fmt::Display,
 {
     pub(crate) fn take_history(&mut self) -> Box<dyn AnyHistoryProvider> {
-        #[allow(unused)]
-        let initial_route = self.initial_route.clone().unwrap_or("/".parse().unwrap_or_else(|err|
-            panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path or RouterConfig::initial_route to set a custom path", err)
-        ));
         self.history
             .take()
-            .unwrap_or_else(|| default_history(initial_route))
+            .unwrap_or_else(|| {
+                let initial_route = self.initial_route.clone().unwrap_or_else(|| "/".parse().unwrap_or_else(|err|
+                    panic!("index route does not exist:\n{}\n use MemoryHistory::with_initial_path or RouterConfig::initial_route to set a custom path", err)
+                ));
+                default_history(initial_route)
+    })
     }
 }
 

+ 1 - 0
packages/router/tests/via_ssr/main.rs

@@ -1,2 +1,3 @@
 mod link;
 mod outlet;
+mod without_index;

+ 41 - 0
packages/router/tests/via_ssr/without_index.rs

@@ -0,0 +1,41 @@
+use dioxus::prelude::*;
+
+// Tests for regressions of <https://github.com/DioxusLabs/dioxus/issues/2468>
+#[test]
+fn router_without_index_route_parses() {
+    let mut vdom = VirtualDom::new_with_props(
+        App,
+        AppProps {
+            path: Route::Test {},
+        },
+    );
+    vdom.rebuild_in_place();
+    let as_string = dioxus_ssr::render(&vdom);
+    assert_eq!(as_string, "<div>router with no index route renders</div>")
+}
+
+#[derive(Routable, Clone, Copy, PartialEq, Debug)]
+enum Route {
+    #[route("/test")]
+    Test {},
+}
+
+#[component]
+fn Test() -> Element {
+    rsx! {
+        div {
+            "router with no index route renders"
+        }
+    }
+}
+
+#[component]
+fn App(path: Route) -> Element {
+    rsx! {
+        Router::<Route> {
+            config: {
+                move || RouterConfig::default().history(MemoryHistory::with_initial_path(path))
+            }
+        }
+    }
+}