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

React Router问题:路由跳转后旧页面内容未消失

解决React Router跳转后原页面内容保留的问题

这个问题我之前也碰到过,核心原因是你的路由结构导致Dashboard组件在跳转到/wysiwyg时仍然会被完整渲染,所以它里面的菜单部分会一直保留。咱们分两种场景来解决:

场景1:跳转到/wysiwyg时完全替换Dashboard内容(隐藏菜单)

你需要把Dashboard和WYSIWYG设为同级的顶层路由,而不是嵌套关系。

步骤1:调整根路由配置(比如App.js)

原来的根路由可能是默认匹配所有以/开头的路径,导致Dashboard一直被渲染。现在改成用Switch精确匹配路由:

import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import Dashboard from './dashboard';
import WYSIWYG from './editor/wysiwyg';

function App() {
  return (
    <Router>
      <Switch>
        {/* 只有访问根路径/时才渲染Dashboard */}
        <Route exact path="/" component={Dashboard} />
        {/* 访问/wysiwyg时直接渲染WYSIWYG,不加载Dashboard */}
        <Route path="/wysiwyg" component={WYSIWYG} />
      </Switch>
    </Router>
  );
}

export default App;

步骤2:简化Dashboard.js代码

因为路由逻辑已经移到根组件,Dashboard里只保留菜单和默认内容即可:

import React, { Component } from 'react';
import { Link } from 'react-router-dom';

export default class Dashboard extends Component{
  render(){
    return(
      <div className="wrapper">
        <ul id="DASHBOARD-MENU">
          <li><Link to="/wysiwyg">WYSIWYG</Link></li>
        </ul>
        {/* 这里可以放Dashboard默认显示的首页内容 */}
      </div>
    )
  }
}

这样点击Link后,页面会完全切换到WYSIWYG的内容,Dashboard的菜单不会再显示。

场景2:保留Dashboard菜单(作为导航布局),只切换内容区域

如果你希望菜单一直存在,只替换中间的内容部分,那需要把菜单和内容区域分开,让内容区域由Switch控制:

修改Dashboard.js:

import React, { Component } from 'react';
import { Switch, Route, Link } from 'react-router-dom';
import WYSIWYG from './editor/wysiwyg';
// 可以导入Dashboard的首页组件,比如Home
// import Home from './home';

export default class Dashboard extends Component{
  render(){
    return(
      <div className="wrapper">
        {/* 菜单固定显示 */}
        <ul id="DASHBOARD-MENU">
          <li><Link to="/wysiwyg">WYSIWYG</Link></li>
        </ul>
        {/* 内容区域由Switch控制切换 */}
        <div className="content-container">
          <Switch>
            {/* 根路径时显示Dashboard的首页内容 */}
            {/* <Route exact path="/" component={Home} /> */}
            <Route path="/wysiwyg" component={WYSIWYG} />
          </Switch>
        </div>
      </div>
    )
  }
}

根路由配置只需要渲染Dashboard即可:

import React from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import Dashboard from './dashboard';

function App() {
  return (
    <Router>
      <Route path="/" component={Dashboard} />
    </Router>
  );
}

export default App;

为什么原来的代码会出问题?

你原来的Dashboard里,<ul id="DASHBOARD-MENU">和<Switch>是同级元素,没有被任何路由条件包裹,所以不管路由怎么切换,这部分都会渲染。同时,如果根路由没有加exact,访问/wysiwyg时仍然会匹配/路径,导致Dashboard一直被完整渲染,最终菜单和WYSIWYG内容同时显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:37:36