diff --git a/examples/fermi.rs b/examples/fermi.rs index 2be01d019..f4391de5e 100644 --- a/examples/fermi.rs +++ b/examples/fermi.rs @@ -1,7 +1,6 @@ #![allow(non_snake_case)] use dioxus::prelude::*; -use fermi::prelude::*; fn main() { dioxus::desktop::launch(app) diff --git a/packages/router/examples/simple.rs b/packages/router/examples/simple.rs index 9ac8b3e3b..a079a5f5d 100644 --- a/packages/router/examples/simple.rs +++ b/packages/router/examples/simple.rs @@ -20,6 +20,7 @@ fn app(cx: Scope) -> Element { Link { to: "/blog", li { "blog" }} Link { to: "/blog/tim", li { "tims' blog" }} Link { to: "/blog/bill", li { "bills' blog" }} + Link { to: "/apples", li { "go to apples" }} } Route { to: "/", Home {} } Route { to: "/blog/", BlogList {} } diff --git a/packages/router/src/components/redirect.rs b/packages/router/src/components/redirect.rs index aae8e6d92..a1d2d7727 100644 --- a/packages/router/src/components/redirect.rs +++ b/packages/router/src/components/redirect.rs @@ -37,8 +37,18 @@ pub struct RedirectProps<'a> { pub fn Redirect<'a>(cx: Scope<'a, RedirectProps<'a>>) -> Element { let router = use_router(&cx); - // todo: check if the current location matches the "from" pattern - router.replace_route(cx.props.to, None, None); + let immediate_redirect = cx.use_hook(|_| { + if let Some(from) = cx.props.from { + router.register_total_route(from.to_string(), cx.scope_id()); + false + } else { + true + } + }); + + if *immediate_redirect || router.should_render(cx.scope_id()) { + router.replace_route(cx.props.to, None, None); + } None }