我正在尝试使用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>
答案 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
组件正在每个视图中呈现,因为它位于视图之外。这里有几个选项:
Nav
移入家庭和个人资料。如果您希望保持Routes
组件不变,那么这将很有意义。withNav
。如果您需要渲染的不仅仅是顶部带有Nav的主页和配置文件,这将是最佳选择。假设您有一个模态需要完全相同的Nav
(出于某种原因),建立HOC可能很有意义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>