我正在使用登录界面在React中开发一个网站。该网站显示了一个自定义的导航组件,但是我不希望它显示在本国路线(即登录页面)上,但是据我了解,静态组件不会在路线更改时重新呈现,这是否准确?
我正在使用React-Router处理所有路由。
这是我的App.js现在的样子:
render() {
return (
<Router className="App">
<Header />
<NavigationBar />
<div id="container">
<Route path="/" exact component={LoginPage}/>
<Route path="/EventInfo" component={EventInfo}/>
<Route path="/RSVP" component={RSVP}/>
<Route path="/Attendance" component={Attendance}/>
<Route path="/Confirmation" component={Confirmation}/>
<Route path="/Contact" component={Contact}/>
<Route path="/Lodging" component={Lodging}/>
</div>
</Router>
);
};
答案 0 :(得分:1)
是的。按照目前的构造,您的<NavigationBar />
会一直显示。您可以做的就是将使用NavigationBar的Routes
隔离到自己的组件中。
因此,请尝试以下操作:
import { Switch, Router, Route } from "react-router-dom
render() {
const AuthenticatedRoutes = () => {
return (
<NavigationBar />
<div id="container">
<Switch>
<Route path="/EventInfo" component={EventInfo}/>
<Route path="/RSVP" component={RSVP}/>
<Route path="/Attendance" component={Attendance}/>
<Route path="/Confirmation" component={Confirmation}/>
<Route path="/Contact" component={Contact}/>
<Route path="/Lodging" component={Lodging}/>
</Switch>
</div>
)
}
return (
<Router className="App">
<Header />
<Switch>
<Route path="/" exact component={LoginPage}/>
<Route component={AuthenticatedRoutes}/>
</Switch>
</Router>
);
};
在我们新的Router
定义中,Header
组件将始终显示。
这里重要的是要了解Switch
组件。它将呈现路径与提供的URL匹配的第一个Route
。因此,如果URL为"/"
,我们将仅显示Header
和LoginPage
。
但是,假设我们现在导航到URL "/EventInfo"
。现在,在我们的Switch
中定义的外部Router
中没有匹配的路径,因此我们渲染了AuthenticatedRoutes
组件。执行相同的模式,现在我们始终显示NavigationBar
,react-router-dom
将执行内部的Switch
来查找路径与提供的URL匹配的Route
。因此也呈现了EventInfo
组件。
此结构对于切换authenticated
和unauthenticated
组件的显示非常有用。
答案 1 :(得分:0)
您可以执行以下操作:
render() {
return (
<Router className="App">
<Header />
<div id="container">
<Route path="/" exact component={LoginPage} />
<Route path="/blah">
<NavigationBar />
<Route path="/blah/EventInfo" component={EventInfo} />
<Route path="/blah/RSVP" component={RSVP} />
<Route path="/blah/Attendance" component={Attendance} />
<Route path="/blah/Confirmation" component={Confirmation} />
<Route path="/blah/Contact" component={Contact} />
<Route path="/blah/Lodging" component={Lodging} />
</Route>
</div>
</Router>
);
};
答案 2 :(得分:0)
在 NavigationBar.js 中你可以这样做
import React, { useState } from "react";
import { useLocation } from "react-router-dom";
function NavigationBar() {
const location = useLocation();
const path = location.pathname;
const [display, setDisplay] = useState(
path !== "/" ? true : false
);
return (
<>
{display && (
<div>
</div>
)}
</>
);
}
export default NavigationBar;