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

React函数式组件中如何仅非首页修改Header组件h1字体颜色为黑色

解决方案

方案1:在Header组件内使用useLocation钩子(无需修改路由配置,推荐)

你使用的是react-router路由体系,直接在函数式Header组件中调用useLocation钩子获取当前访问路径,判断是否为首页即可动态控制h1的颜色样式。

修改后的Header组件代码:

import { Link, useLocation } from 'react-router-dom'
// bootstrap的Dropdown相关组件导入此处省略

const Header = () => {
  const location = useLocation()
  // 判断当前是否处于首页
  const isHome = location.pathname === '/'

  return (
    <nav>
      <Link to='/' className="title">
        {/* 动态绑定内联样式,非首页时颜色设为黑色 */}
        <h1 style={{ color: isHome ? '' : '#000' }}>Ioana Savin</h1>
        {/* 如果内联样式不生效,改用动态类名方案,优先级更高:
        <h1 className={isHome ? '' : 'text-black'}>Ioana Savin</h1>
        同步在全局CSS文件中添加规则:
        .title h1.text-black {
          color: #000 !important;
        }
        */}
      </Link>

      <div className="head">
        <DropdownButton title="Portfolio" className='button'>
          <Dropdown.Item href='/fashion'>Fashion</Dropdown.Item>
          <Dropdown.Item href='/portraits'>Portraits</Dropdown.Item>
          <Dropdown.Item href='/bnw'>BnW</Dropdown.Item>
          <Dropdown.Item href='/analogue'>Analogue</Dropdown.Item>
          <Dropdown.Item href='/clienti'>Clienti</Dropdown.Item>
        </DropdownButton>
        
        <Link to='/portfolio' className="link">   
          <DropdownButton title="Contact" className='button' />     
        </Link>
      </div>
    </nav>
  )
}

export default Header

内联样式失效原因说明:

如果内联样式没有生效,大概率是现有CSS样式优先级高于内联样式,比如你全局定义了.title h1的颜色规则,或是bootstrap默认样式添加了!important标记,改用动态类名+CSS规则加!important的方式即可覆盖原有样式。


方案2:通过路由Props传参控制(无需在Header内引入路由钩子)

如果你不想让Header组件耦合路由逻辑,可以修改路由配置,给不同页面下的Header传入是否为首页的标记位:

修改后的路由配置代码:

<Router>
  <div className="app">
    <Switch>
      <Route path='/portraits'>
        <Header isHome={false} />
        <Portraits />
        <Footer />
      </Route>

      <Route path='/contact'>
        <Header isHome={false} />
        <Contact />
        <Footer />
      </Route>

      <Route path='/'>
        <Header isHome={true} />
        <Home />
      </Route>
    </Switch>
  </div>
</Router>

之后Header组件直接接收isHome属性即可判断样式,逻辑和方案1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:54:03