如何在用户单击 react-router-dom 上的后退按钮时更改组件的状态?
How to change component's states when user clicks back button on react-router-dom?
我正在为一家公司构建一个小型仪表板。我在整个应用程序中有一个路由器,在 /
路径中我显示 5 <Link />
以在同一仪表板内的不同页面之间移动。我想要实现的是,在进入应用程序的不同部分时,我必须隐藏这些 <Link />
标记。我通过改变状态来做到这一点,它工作正常。
但是当我按下后退按钮时真正的问题出现了,因为状态没有改变。例如,当我单击 Patients 时,visibleMenu
状态变为 false,以隐藏菜单。当我单击仪表板时,visibleMenu
状态再次变为 true。当我单击后退按钮时,visibleMenu
状态与单击后退按钮之前保持相同。
有没有一种方法可以使用 react-router-dom
来处理后退按钮的按下,这样当用户返回时我可以检查 URL 相应地更改并设置 visibleMenu
状态?
编辑
我正在添加一些代码供您查看。
菜单组件是这样的:
<div className={this.props.className}>
<div>
<ul className={'dashboardLinks ' + (this.state.visibleMenu ? 'show' : 'hide')}>
<li>
<Link to="/patients" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-users"></span>
Patients
</Link>
</li>
<li>
<Link to="/filter" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-filter"></span>
Filter Data
</Link>
</li>
<li>
<Link to="/search" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-search"></span>
Quick Search
</Link>
</li>
<li>
<Link to="/account" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-user"></span>
My Account
</Link>
</li>
<li>
<a href="#logout" className="br10 sh1 anim-1" onClick={this.props.logout}>
<span className="fa fa-sign-out"></span>
Logout
</a>
</li>
</ul>
<Route path="/patients" component={Patients}></Route>
<Route path="/patients/:id" component={PatientInfo}></Route>
<Route path="/filter" component={Filter}></Route>
<Route path="/search" component={Search}></Route>
<Route path="/account" component={Account}></Route>
</div>
</div>
在那里你可以看到我是如何根据状态显示和隐藏菜单的。那个状态我需要检查用户是否重新加载页面,根据URL设置它,如果它只是“/”则显示菜单,否则不显示它。
我是这样做的:
componentWillMount() {
var url = window.location.pathname;
if(url === '/') {
this.setState({
visibleMenu: true
});
} else {
this.setState({
visibleMenu: false
});
}
}
但是如果用户点击后退按钮则状态不会更新,所以菜单不会显示。
由于我没有收到任何答复,我只是重新构建了我的 Web 应用程序,以声明 Routes
任何选项。
我正在为一家公司构建一个小型仪表板。我在整个应用程序中有一个路由器,在 /
路径中我显示 5 <Link />
以在同一仪表板内的不同页面之间移动。我想要实现的是,在进入应用程序的不同部分时,我必须隐藏这些 <Link />
标记。我通过改变状态来做到这一点,它工作正常。
但是当我按下后退按钮时真正的问题出现了,因为状态没有改变。例如,当我单击 Patients 时,visibleMenu
状态变为 false,以隐藏菜单。当我单击仪表板时,visibleMenu
状态再次变为 true。当我单击后退按钮时,visibleMenu
状态与单击后退按钮之前保持相同。
有没有一种方法可以使用 react-router-dom
来处理后退按钮的按下,这样当用户返回时我可以检查 URL 相应地更改并设置 visibleMenu
状态?
编辑
我正在添加一些代码供您查看。
菜单组件是这样的:
<div className={this.props.className}>
<div>
<ul className={'dashboardLinks ' + (this.state.visibleMenu ? 'show' : 'hide')}>
<li>
<Link to="/patients" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-users"></span>
Patients
</Link>
</li>
<li>
<Link to="/filter" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-filter"></span>
Filter Data
</Link>
</li>
<li>
<Link to="/search" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-search"></span>
Quick Search
</Link>
</li>
<li>
<Link to="/account" className="br10 sh1 anim-1" onClick={this.hideMenu}>
<span className="fa fa-user"></span>
My Account
</Link>
</li>
<li>
<a href="#logout" className="br10 sh1 anim-1" onClick={this.props.logout}>
<span className="fa fa-sign-out"></span>
Logout
</a>
</li>
</ul>
<Route path="/patients" component={Patients}></Route>
<Route path="/patients/:id" component={PatientInfo}></Route>
<Route path="/filter" component={Filter}></Route>
<Route path="/search" component={Search}></Route>
<Route path="/account" component={Account}></Route>
</div>
</div>
在那里你可以看到我是如何根据状态显示和隐藏菜单的。那个状态我需要检查用户是否重新加载页面,根据URL设置它,如果它只是“/”则显示菜单,否则不显示它。
我是这样做的:
componentWillMount() {
var url = window.location.pathname;
if(url === '/') {
this.setState({
visibleMenu: true
});
} else {
this.setState({
visibleMenu: false
});
}
}
但是如果用户点击后退按钮则状态不会更新,所以菜单不会显示。
由于我没有收到任何答复,我只是重新构建了我的 Web 应用程序,以声明 Routes
任何选项。