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

React Router中使用Link组件跳转时如何实现页面刷新?

问题原因

  1. 重复嵌套Router组件:单React应用仅需顶层保留一个Router实例即可,你在Login组件内部额外嵌套了一层Router,导致内部的Link跳转只会触发内层Router的路由匹配,外层App的Switch完全感知不到路径变化,Login组件不会被卸载,所以旧内容会一直保留,仅在内层Router对应的位置渲染Select内容。
  2. Link语法错误:你在Link标签属性中直接写{window.location.reload()}属于语法错误,会在组件渲染时直接触发刷新,完全不符合点击跳转的逻辑,且路由跳转本身不需要手动刷新页面。
  3. 冗余代码:App中定义的createBrowserHistory没有实际使用,BrowserRouter默认内置了history实例,无需额外创建。

修复后的代码

App.js

import Login from "./pages/Login";
import Select from "./pages/Select";
import {
    BrowserRouter as Router,
    Switch,
    Route
} from "react-router-dom";

function App() {
    return (
        <div className="fnb">
            <Router>
                <Switch>
                    <Route exact path="/" component={Login} />
                    <Route exact path="/select" component={Select} />
                </Switch>
            </Router>
        </div>
    );
}

export default App;

Login.js

删除内部嵌套的Router、多余的Switch和Route规则,仅保留Link即可:

import React from "react";
import { Link } from "react-router-dom";

function Login() {
    return (
        <div>
            <p>this is the login</p>
            <Link to="/select">go to select page</Link>
        </div>
    );
}

export default Login;

Select组件代码无需修改。

效果说明

修复后所有路由规则统一由顶层Router管理,点击Link触发路径变化时,顶层Switch会重新匹配路由,匹配到/select路径时会自动卸载Login组件、渲染Select组件,不会残留Login页面的旧内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:27:03