如何在某些React组件中隐藏导航栏

时间:2018-11-01 08:31:29

标签: reactjs react-router-v4

我正在尝试使用react进行登录。路线按预期运行。但是,当我尝试引入导航栏时,它在所有路线上都是可见的。我只想在所选组件上显示导航栏(仅在配置文件和本地路线上)。

任何建议将不胜感激。

这是Routes.js:

export default class Routes extends Component {
  render() {
    return (
      <Switch>
        <Route
          exact
          path='/*/home'
          component={Home}
        />
        <Route
          exact
          path='/*/login'
          component={Login}
        />
        <Route
          exact
          path='/*/profile'
          component={Profile}
        />
        <Route
          exact
          path='/'
          component={Main}
        />
        <Route
          exact
          path='/*/'
          component={Org}
        />
      </Switch>
    );
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

这是App.js:

<div className="App">
  <Nav />
  <Routes />
</div>

4 个答案:

答案 0 :(得分:2)

这是解决方案。检查“react-router-dom”中的 useLocation 钩子

function App() {
  const location = useLocation();

  return (
    <>
      {location.pathname === '/' ? null : <Navbar />}

      <Switch>
        <Route path='/' exact component={Home} />
        <Route path='/projects' component={Projects} />
        <Route path='/about' component={About} />
      </Switch>
    </>
  );
}

export default App;

答案 1 :(得分:1)

您的Nav组件正在每个视图中呈现,因为它位于视图之外。这里有几个选项:

  1. 仅将Nav移入家庭和个人资料。如果您希望保持Routes组件不变,那么这将很有意义。
  2. 构建一个higher-order component来呈现视图withNav。如果您需要渲染的不仅仅是顶部带有Nav的主页和配置文件,这将是最佳选择。假设您有一个模态需要完全相同的Nav(出于某种原因),建立HOC可能很有意义
  3. 更改组件树以反映所需的结构。如果只有家庭和个人资料需要Nav,则可以在单独的组件中声明这两条路线。

答案 2 :(得分:0)

您可以尝试将导航栏隐藏在css中,并仅使用React-Helmet在特定组件中显示

 <Helmet>
      <style type="text/css">{`
    .navbar {
        display: inline
    }

`}</style>
    </Helmet>

答案 3 :(得分:0)

下面的代码对我有用

 <style type="text/css">
      {`.navbar {display: none}`}
    </style>