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

React页面切换需手动刷新问题求助

问题描述

我制作了Navbar组件以及Home.jsx和About.jsx页面,只有在页面刷新后,这两个页面才能跳转到对应路径。试过window.location.reload(false);方法也没用,求解决。

原App.js代码

import React from "react";
import Navbar from "./Components/Navbar";
import Home from "./Components/Pages/Home/Home";
import About from "./Components/Pages/About/About";
import { BrowserRouter as Router , Route, Routes } from "react-router-dom";



function App() {



  return (
    <>
      <Navbar />
      <Router>
        <div className="pages">
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
      </div>
      </Router>
    </>
  );
}

export default App;

原Navbar.js代码

import React, { useState } from 'react';
import './Styles/Navbar.css'
import  {BrowserRouter , NavLink } from 'react-router-dom'


function Navbar() {

  const [click, setClick] = useState(false);

  const handleClick = () => setClick(!click);


  return (
    <BrowserRouter>
    <div className='nav-container'>
        <div className='nav-wrapper'>
            <div className='nav-logo'>
                <h1>SapphireServers</h1>
                <i class="fa-solid fa-server"></i>
            </div>
            <div className="nav-link-wrapper">
            <ul className={click ? "nav-menu active" : "nav-menu"}>
            <li className="nav-item">
              <NavLink
                to="/"
                activeClassName="active"
                className="nav-links"
                onClick={handleClick}
              >
                Home
              </NavLink>
            </li>
            <li className="nav-item">
              <NavLink
                exact to="/about" relative='path' activeClassName="active" className="nav-links"onClick={handleClick}  >
                About
              </NavLink>
              </li>
              <li className="nav-item">
              <a href="https://dash.sapphireservers.net"  activeClassName="Active" className='nav-links'>Sign-Up</a>
              </li>
          </ul>
          </div>
          <div className="nav-icon" onClick={handleClick}>
            <i className={click ? "fas fa-times" : "fas fa-bars"}></i>
          </div>
        </div>
        </div>
    </BrowserRouter>
  )
}

export default Navbar;
解决方案

核心问题是重复嵌套了BrowserRouter:你在App.js里已经用了<Router>(BrowserRouter的别名)提供路由上下文,又在Navbar.js里套了一层<BrowserRouter>,导致两层路由状态隔离——点击NavLink时是在内层Router里跳转,外层的Routes完全感知不到,所以页面不会更新;只有刷新时浏览器直接请求路径,外层Router才会匹配到对应页面。

修复步骤

  1. 删除Navbar.js里的<BrowserRouter>包裹,只保留导航结构
  2. 把Navbar移到App.js的<Router>内部(让NavLink直接获取顶层路由上下文,结构更规范)

修改后的代码

Navbar.js

import React, { useState } from 'react';
import './Styles/Navbar.css'
import { NavLink } from 'react-router-dom'


function Navbar() {
  const [click, setClick] = useState(false);
  const handleClick = () => setClick(!click);

  return (
    <div className='nav-container'>
      <div className='nav-wrapper'>
        <div className='nav-logo'>
          <h1>SapphireServers</h1>
          <i className="fa-solid fa-server"></i>
        </div>
        <div className="nav-link-wrapper">
          <ul className={click ? "nav-menu active" : "nav-menu"}>
            <li className="nav-item">
              <NavLink
                to="/"
                activeClassName="active"
                className="nav-links"
                onClick={handleClick}
              >
                Home
              </NavLink>
            </li>
            <li className="nav-item">
              <NavLink
                exact to="/about" relative='path' 
                activeClassName="active" className="nav-links" 
                onClick={handleClick}
              >
                About
              </NavLink>
            </li>
            <li className="nav-item">
              <a href="https://dash.sapphireservers.net" className='nav-links'>
                Sign-Up
              </a>
            </li>
          </ul>
        </div>
        <div className="nav-icon" onClick={handleClick}>
          <i className={click ? "fas fa-times" : "fas fa-bars"}></i>
        </div>
      </div>
    </div>
  )
}

export default Navbar;

App.js

import React from "react";
import Navbar from "./Components/Navbar";
import Home from "./Components/Pages/Home/Home";
import About from "./Components/Pages/About/About";
import { BrowserRouter as Router , Route, Routes } from "react-router-dom";


function App() {
  return (
    <Router>
      <Navbar />
      <div className="pages">
        <Routes>
          <Route path="/" element={<Home />} />
          <Route path="/about" element={<About />} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:45:25