DioxusLabs/dioxus · error

`GoBackButton` must have access to a parent router

Error message

`GoBackButton` must have access to a parent router

What it means

GoBackButton called use_router_internal() and got None, meaning no Router ancestor provides router context. In debug builds this panics; in release the button logs the error and renders inactive/disabled since it cannot navigate without a router.

Source

Thrown at packages/router/src/components/history_buttons.rs:72

/// # let mut vdom = VirtualDom::new(App);
/// # vdom.rebuild_in_place();
/// # assert_eq!(
/// #     dioxus_ssr::render(&vdom),
/// #     r#"<button disabled="true">go back</button>"#
/// # );
/// ```
pub fn GoBackButton(props: HistoryButtonProps) -> Element {
    let HistoryButtonProps { children } = props;

    // hook up to router
    let router = match use_router_internal() {
        Some(r) => r,
        #[allow(unreachable_code)]
        None => {
            let msg = "`GoBackButton` must have access to a parent router";
            error!("{msg}, will be inactive");
            #[cfg(debug_assertions)]
            panic!("{}", msg);
            return VNode::empty();
        }
    };

    let disabled = !router.can_go_back();

    rsx! {
        button {
            disabled: "{disabled}",
            onclick: move |evt| {
                evt.prevent_default();
                router.go_back()
            },
            {children}
        }
    }
}

View on GitHub (pinned to 24f6a829df)

Solutions

  1. Render GoBackButton inside a Router component so it can access the router context.
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at packages/router/src/components/history_buttons.rs:72 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of DioxusLabs/dioxus@24f6a829df (2026-08-23). Data as JSON: /api/errors/3556fb7da4309a4e. Report an issue: GitHub.