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

How to hide Nav bar in some react components

我正在尝试使用 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>

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

  1. 仅将 Nav 移动到主页和个人资料中。如果您想保持 Routes 组件不变,这将很有意义。
  2. 构建一个 higher-order component 用于呈现视图 withNav。如果您需要渲染的不仅仅是顶部带有导航的主页和个人资料,这将是最佳选择。假设您有一个模式需要具有完全相同的 Nav(出于某种原因),构建一个 HOC
  3. 可能有意义
  4. 更改您的组件树以反映您需要的结构。如果只有 home 和 profile 需要 Nav,那么在单独的组件中声明这两个路由可能是有意义的。

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

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

`}</style>
    </Helmet>

下面的代码对我有用

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

这是解决方案。在“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;