如何在某些反应组件中隐藏导航栏
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
组件正在每个视图中呈现,因为它位于您的视图之外。这里有几个选项:
- 仅将
Nav
移动到主页和个人资料中。如果您想保持 Routes
组件不变,这将很有意义。
- 构建一个 higher-order component 用于呈现视图
withNav
。如果您需要渲染的不仅仅是顶部带有导航的主页和个人资料,这将是最佳选择。假设您有一个模式需要具有完全相同的 Nav
(出于某种原因),构建一个 HOC 可能有意义
- 更改您的组件树以反映您需要的结构。如果只有 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;
我正在尝试使用 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
组件正在每个视图中呈现,因为它位于您的视图之外。这里有几个选项:
- 仅将
Nav
移动到主页和个人资料中。如果您想保持Routes
组件不变,这将很有意义。 - 构建一个 higher-order component 用于呈现视图
withNav
。如果您需要渲染的不仅仅是顶部带有导航的主页和个人资料,这将是最佳选择。假设您有一个模式需要具有完全相同的Nav
(出于某种原因),构建一个 HOC 可能有意义
- 更改您的组件树以反映您需要的结构。如果只有 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;