[英]Hidding Navbar with React Router V4
我正在構建一個簡單的前端應用程序,並且正在使用React Router V4,我試圖在“ Login
和“ Register
屏幕上隱藏導航欄。
這是我的App.js
代碼
class App extends Component {
constructor() {
super();
this.state = {
isNavbarHidden: false
};
}
componentDidMount() {
const currentRoutes = this.props.location;
if (currentRoutes === "/") {
this.setState({ isNavbarHidden: true });
}
} // end of componentDidMount
render() {
const { isNavbarHidden } = this.state;
console.log(isNavbarHidden);
return (
<div>
{!isNavbarHidden && <Navigation />}
<div className="sans-serif">
<Route exact path="/" component={Login} />
<Route exact path="/Register" component={Register} />
<Route exact path="/Home" component={Home} />
<Route exact path="/Dashboard" component={Dashboard} />
</div>
</div>
);
}
}
export default App;
我在index.js
有這個
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
我以為我在componentDidMount
中執行if語句時可以解決此問題,但是在路線'/'
上仍顯示導航欄
任何幫助,將不勝感激!
我認為不是const currentRoutes = this.props.location;
您需要類似const currentRoute = this.props.location.pathname
。
this.props.location
是一個Object,因此您的條件永遠不會為true
。
掛載您的App
組件后, componentDidMount
只會被調用一次。
您可以改為在componentDidMount
偵聽history
中的更改,如果pathname
是/
或/Register
,則更改isNavbarHidden
。
例
class App extends Component {
constructor(props) {
super(props);
const { pathname } = this.props.location;
this.state = {
isNavbarHidden: pathname === "/" || pathname === "/Register"
};
}
componentDidMount() {
this.unlisten = this.props.history.listen(location => {
const { pathname } = location;
const isNavbarHidden = pathname === "/" || pathname === "/Register";
this.setState({ isNavbarHidden });
});
}
componentWillUnmount() {
this.unlisten();
}
render() {
const { isNavbarHidden } = this.state;
return (
<div>
{!isNavbarHidden && <Navigation />}
<Link to="/">Login</Link>
<Link to="/Register">Register</Link>
<Link to="/Home">Home</Link>
<Link to="/Dashboard">Dashboard</Link>
<div className="sans-serif">
<Route exact path="/" component={Login} />
<Route exact path="/Register" component={Register} />
<Route exact path="/Home" component={Home} />
<Route exact path="/Dashboard" component={Dashboard} />
</div>
</div>
);
}
}
ReactDOM.render(
<BrowserRouter>
<Route path="/" component={App} />
</BrowserRouter>,
document.getElementById("root")
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.