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

使用react-router-dom的<Link/>时React组件渲染异常,新页覆盖旧页如何修复?

问题原因与修复方案

你遇到的页面叠加问题由两个核心路由配置错误导致,按以下步骤修改即可解决:

核心错误1:Switch组件大小写错误

React Router 提供的路由匹配组件必须是大写开头的Switch,你在定义routes变量时使用了小写的<switch>,React会将其识别为普通自定义HTML标签,不会执行路由匹配逻辑,导致所有<Route>对应的组件全部同时渲染,自然就出现了页面叠加的效果。

核心错误2:根路径路由缺少exact匹配规则

Switch组件会按照从上到下的顺序匹配路径,不带exact属性的path="/"会匹配所有以/开头的路径,就算你跳转至/Portfolio/Astro也会优先匹配到根路径对应的Home组件,导致Home和目标页面同时渲染。

核心错误3:重复嵌套Switch

你已经在return部分的Layout组件内包裹了<Switch>,不需要在routes变量内部重复定义Switch逻辑。

修改后的App.js参考代码

import { Switch, Route, Redirect } from 'react-router-dom'

class App extends Component {
  render() {
    const routes = (
      <>
        {/* 根路径添加exact,只有完全匹配/时才渲染Home */}
        <Route exact path="/" component={Home} />
        <Route path="/Portfolio/Astro" component={Astro} />
        <Route path="/Portfolio/Travel" component={Travel} />
        <Redirect to="/" />
      </>
    );

    return (
      <div className="App">
        <Layout>
          <Switch>{routes}</Switch>
        </Layout>
      </div>
    );
  }
}

// 已经被BrowserRouter包裹的App组件不需要额外用withRouter包裹,可直接移除
export default App;

可选优化说明

如果你使用的是React Router v6及以上版本,Switch组件已被弃用,替换为Routes组件,同时component属性需改为element属性传组件实例,调整写法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 05:45:03