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

React Router如何设置Navigation组件不在Contact页面显示

实现方案

有两种常用的实现方式,你可以根据自己的需求选择:

方案1:仅修改App.js,无需调整Navigation组件*(推荐)*

直接通过Route的路径匹配规则控制Navigation的渲染,React Router v5支持传入路径数组匹配多个路由:
修改后的完整App.js代码如下:

import React, { Component } from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
 
import Home from './components/Home';
import About from './components/About';
import Contact from './components/Contact';
import Error from './components/Error';
import Navigation from './components/Navigation';
 
class App extends Component {
  render() {
    return (      
       <BrowserRouter>
        <div>
          {/* 仅匹配根路径和/about路径时渲染导航 */}
          <Route path={["/", "/about"]} exact component={Navigation} />
            <Switch>
             <Route path="/" component={Home} exact/>
             <Route path="/about" component={About}/>
             <Route path="/contact" component={Contact}/>
             <Route component={Error}/>
           </Switch>
        </div> 
      </BrowserRouter>
    );
  }
}
 
export default App;

方案2:在Navigation组件内部判断路径控制显隐

如果需要把显隐逻辑封装在Navigation组件内部,可以用withRouter高阶组件注入路由属性:

  1. 修改Navigation组件代码:
    如果是类组件写法:
import React from 'react';
import { withRouter } from 'react-router-dom';

class Navigation extends Component {
  render() {
    // 访问contact路径时返回null不渲染
    if (this.props.location.pathname === '/contact') {
      return null;
    }
    // 原有导航渲染逻辑
    return (
      <div>
        {/* 原有导航内容 */}
      </div>
    )
  }
}

export default withRouter(Navigation);

如果是函数组件写法:

import React from 'react';
import { withRouter } from 'react-router-dom';

function Navigation(props) {
  if (props.location.pathname === '/contact') {
    return null;
  }
  return (
    <div>
      {/* 原有导航内容 */}
    </div>
  )
}

export default withRouter(Navigation);
  1. App.js代码保持你原来的写法即可。

如果你使用的是React Router v6版本,只需要把对应语法替换为v6的规范即可,核心逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:02