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

React中Wildcard路由随所有路由一同渲染的问题

React路由异常:访问路由时同时渲染UnknownRoute的解决办法

问题原因

你遇到的问题根源是主路由文件中使用了多个独立的<Routes>组件。React Router里,每个<Routes>都会单独对当前URL进行匹配,只要URL符合该组件内的路由规则,就会渲染对应组件。当你访问/appA/home这类路由时,第三个<Routes>里的通配符*会匹配所有URL,导致UnknownRoute和目标组件同时被渲染。

解决方案

把所有路由整合到同一个<Routes>组件中,让React Router按照顺序匹配路由,找到第一个匹配项后就停止,只有当没有任何路由匹配时才会触发通配符规则。具体修改如下:

1. 修改模块路由文件,移除外层<Routes>

让appA-routing.tsx和appB-routing.tsx直接返回<Route>元素,而非完整的<Routes>组件:

修改后的appA-routing.tsx:

// All the require imports.

const AppARouting = () => {
    return (
        <Route path={"/appA"} element={<AppA_Layout />}>
            <Route path={Paths.appA_HOME} element={<AppA_Home />} >
                <Route path={Paths.appA_DASHBOARD} element={<AppA_Dashboard />} />
                <Route path={Paths.REQUESTS} element={<Requests />} />
            </Route>
        </Route>
    );
};

AppARouting.displayName = "AppARouting";

export default AppARouting;

修改后的appB-routing.tsx:

// All the require imports.

const AppBRouting = () => {
    return (
        <Route path={"/appB"} element={<AppB_Layout />}>
            <Route path={Paths.appB_HOME} element={<appB_Home />} >
                <Route path={Paths.appB_DASHBOARD} element={<AppB_Dashboard />} />
                <Route path={Paths.APPROVALS} element={<Approvals />} />
            </Route>
        </Route>
    );
};

AppBRouting.displayName = "AppBRouting";

export default AppBRouting;

2. 整合主路由文件的所有路由

在routing.tsx中,将所有路由(包括主模块、AppA、AppB以及兜底路由)放到同一个<Routes>组件内:

修改后的routing.tsx:

// All the require imports.

const Routing: FC = () => {
    return (
        <BrowserRouter basename={Paths.BASE}>
            <Routes>
                {/* 主模块路由 */}
                <Route path="/" element={<MainLayout />}>
                    <Route path="/" element={<MainHome />} />
                </Route>
                
                {/* 导入AppA和AppB的路由 */}
                <AppARouting />
                <AppBRouting />

                {/* 特殊路由和兜底路由 */}
                <Route path={Paths.SignOut} element={<SignOut />}/>
                <Route path={Paths.PAGE_NOT_FOUND} element={<UnknownRoute />} />
                <Route path="*" element={<UnknownRoute />} />
            </Routes>
        </BrowserRouter>
    );
};

Routing.displayName = "Routing";

export default Routing;

3. 检查路由路径定义(可选但重要)

确保Paths中定义的子路由是相对路径,比如Paths.appA_HOME应该是"home"而非"/appA/home",这样嵌套路由才能正确拼接成完整路径/appA/home。

验证

修改完成后,访问/appA/home、/appB/dashboard等路由时,只会渲染对应的组件;当访问未定义的路由时,才会触发UnknownRoute组件。

内容的提问来源于stack exchange,提问作者ngShravil.py

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 19:23:18