javascript - 单击链接时导航抽屉未关闭
问题描述
所以我正在制作一个网站,并为我的导航链接制作了一个移动抽屉,当我点击带有 3 行的按钮并关闭它时,它打开得很好,我做了一个背景,但是现在当我点击一个链接去到下一页导航抽屉没有关闭,要关闭它,我必须点击背景屏幕,我希望在单击页面链接时关闭抽屉。
app.js
state = {
sideDrawerOpen: false
};
drawerToggleClickHandler = () => {
this.setState((prevState) => {
return { sideDrawerOpen: !prevState.sideDrawerOpen };
});
};
backdropClickHandler = () => {
this.setState({ sideDrawerOpen: false });
};
render() {
let backdrop
if (this.state.sideDrawerOpen) {
backdrop = <Backdrop click={this.backdropClickHandler} />
}
return (
<Router>
<div className="App">
<div style={{ height: '100%' }}>
<Toolbar drawerClickHandler={this.drawerToggleClickHandler} />
<SideDrawer show={this.state.sideDrawerOpen} />
{backdrop}
<Route exact path='/' component={Home} />
<Route exact path='/Contact' component={Contact} />
<Route exact path='/Events' component={Events} />
<Route exact path='/About' component={About} />
<Route exact path='/Gallery' component={Gallery} />
</div>
</div>
</Router>
drawer.js
<nav>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/About">About</Link></li>
<li><Link to="/Events">Events</Link></li>
<li><Link to="/Gallery">Gallery</Link></li>
<li><Link to="/Contact">Contact</Link></li>
</ul>
</nav>
解决方案
您<Router>
在 中的组件内呈现app.js
,因此更改页面不会触发卸载或重置您的状态。但是,您可以检测 中的页面更改componentDidUpdate
,并使用它来手动关闭您的抽屉:
componentDidUpdate(prevProps) {
const { location } = this.props;
if (location !== prevProps.location && this.state.sideDrawerOpen) {
this.setState({ sideDrawerOpen: false });
}
}
补充阅读:https ://reacttraining.com/react-router/web/api/history/history-is-mutable
推荐阅读
- sql-server - 如何在 SQL 2008 中设置带有回滚的 try/catch 块?
- php - 验证登录用户后返回 URL
- javascript - 如何在 vue /@cli UI 中正确使用各种 JS(在本例中为 svg.js)库?
- c# - 如何在代码中配置 NHibernate SessionFactory
- php - 如何在代码点火器上用相同的 file_name 覆盖 file_ext
- android - Android、DynamoDb、Document API,如何更新项目?
- mysql - 节点服务器在 API 请求后没有返回任何响应
- javascript - 为什么 import { Thing } 可以工作,但不能 import Thing?
- php - 如何在控制器中的 laravel 5 中爆炸日期
- c++ - C++ 用图逆向自动微分