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

ReactJS中实现按钮随当前页面切换颜色的方法求助

React Router 实现导航按钮随当前页面切换样式

你的问题出在只用了一个state控制两个按钮的样式,导致点击时两个按钮同步切换颜色。正确的做法是根据当前路由路径动态判断每个按钮的样式,而非手动切换state。

实现步骤:

  1. 引入React Router的useLocation钩子,用于获取当前页面的路由路径
  2. 移除原有的btnClass状态和toggleColor函数,无需手动控制样式切换
  3. 给每个按钮根据当前路径动态设置对应样式类

完整代码示例:

import { Routes, Route, useNavigate, useLocation } from 'react-router-dom';
import Home from './Home';
import About from './About';

function Navbar() {
  const navigate = useNavigate();
  const location = useLocation(); // 获取当前路由路径

  const navigateHome = () => navigate('/');
  const navigateToAbout = () => navigate('/about');

  return (
    <div>
      <nav className="nav">
        {/* Home按钮:当前路径为/时用蓝色样式,否则用橙色 */}
        <button
          onClick={navigateHome}
          className={`${location.pathname === '/' ? 'blue-color' : 'orange-color'} po-btn`}
        >Home</button>
        {/* About按钮:当前路径为/about时用蓝色样式,否则用橙色 */}
        <button
          onClick={navigateToAbout}
          className={`${location.pathname === '/about' ? 'blue-color' : 'orange-color'} pr-btn`}
        >About</button>

        <Routes>
          <Route path="/about" element={<About />} />
          <Route path="/" element={<Home />} />
        </Routes>
      </nav>
    </div>
  );
}

export default Navbar;

原理说明:

  • useLocation会在路由变化时自动更新,触发组件重新渲染
  • 每个按钮通过判断location.pathname是否匹配自身路由路径,决定使用对应样式类
  • 无论通过点击按钮切换页面,还是直接输入URL刷新页面,按钮样式都会自动匹配当前页面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:04:59