You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dioxus Router导航异常:use_navigator无法识别Route枚举

解决Dioxus Router中use of undeclared type \Route``编译错误

是的,你需要导出Route枚举并在home.rs组件中引入它,这是解决该错误的核心方案。

错误原因

Dioxus Router生成的路由枚举(通常命名为Route或Routes)默认是模块私有的,仅能在定义它的模块(比如你的main.rs)内访问。当你在src/pages/home.rs中尝试使用Route::TickerPage时,编译器找不到这个类型,因此抛出未声明的错误。

具体解决步骤

  1. 导出路由枚举
    在定义路由枚举的文件(比如main.rs)中,给枚举加上pub修饰符,让它能被其他模块访问:

    // main.rs
    use dioxus_router::Route;
    
    #[derive(Route)]
    pub enum Routes {
        #[route("/")]
        Home,
        #[route("/ticker")]
        TickerPage,
        // 其他路由项
    }
    

    如果是手动定义的枚举,同样需要pub:

    // main.rs
    pub enum Route {
        Home,
        TickerPage,
    }
    
  2. 在home.rs中引入路由枚举
    在src/pages/home.rs顶部添加引入语句,根据你的枚举名称和定义路径调整:

    // src/pages/home.rs
    use crate::Routes; // 如果你命名为Routes
    // 或者 use crate::Route; 如果你命名为Route
    
    pub fn home(cx: Scope) -> Element {
        let navigator = use_navigator(&cx);
        render! {
            button {
                onclick: move |_| navigator.push(Routes::TickerPage),
                "跳转到行情页面"
            }
        }
    }
    
  3. 验证修复
    运行cargo check,确认use of undeclared type \Route``错误消失。

额外注意事项

如果你的路由枚举定义在单独的模块(比如src/routes.rs),需要调整引入路径:

// src/pages/home.rs
use crate::routes::Routes;

同时确保routes.rs中的枚举也是pub的。

内容的提问来源于stack exchange,提问作者IvonaK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:32:37