问题
I am trying to make a login flow using react. Routes are working as expected. But when I try to introduce nav bar, it is visible on all routes. I want to show nav bar only on selected components (only on profile and home route).
Any suggestions would be appreciated.
This is the 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>
This is the App.js:
<div className="App">
<Nav />
<Routes />
</div>
回答1:
Your Nav
component is being rendered in every view because it's located outside your views. There are a couple of options here:
- Move
Nav
into home & profile only. This would make sense if you wanted to keep yourRoutes
component the same. - Build a higher-order component for rendering a view
withNav
. This would be the best option if you need to render more than just home & profile with a Nav on top. Let's say you have a modal that needs to have the exact sameNav
(for some reason), it may make sense to build an HOC - Change your component tree to reflect the structure that you need. If only home & profile need the
Nav
, it may make sense to declare those two routes in a separate component.
回答2:
You can try Hiding the navbar in css, and Just show in Specific Component Using React-Helmet
<Helmet>
<style type="text/css">{`
.navbar {
display: inline
}
`}</style>
</Helmet>
来源:https://stackoverflow.com/questions/53097610/how-to-hide-nav-bar-in-some-react-components