javascript - React Router Dom v4 处理浏览器后退按钮
问题描述
如何使用react-router-dom
v4 禁用用户的浏览器后退按钮单击?
我在页面上显示模式,当用户按下浏览器后退按钮时,用户将被带到上一个屏幕,而不是我想简单地关闭模式。
我试着这样做
onBackButtonEvent(event) {
event.preventDefault();
// the user shouldn't be able to move backward or forward
}
componentDidMount() {
window.onpopstate = this.onBackButtonEvent;
}
但这并不能阻止用户后退或前进。有没有办法通过这个来处理react-router-dom
?
我尝试了多种解决方案,但似乎没有任何效果。
解决方案
我知道这个问题有点老了,但我自己在寻找答案时偶然发现了它。没有干净的方法可以“禁用”后退按钮,但要让用户仅在单击浏览器后退按钮时关闭模式,我发现这可以工作。
只需将历史记录传递给 props 中的模态组件,然后在componentWillUnmount
函数上调用以下内容。
componentWillUnmount() {
this.props.history.goForward();
}
这将无缝地强制浏览器停留在同一页面上但关闭模式(假设它是一个类组件)。
更新:如果使用功能组件,上面的 componentWillUnmount 函数看起来像下面的钩子。
React.useEffect(() => {
return () => {
props.history.goForward();
}
}, []);
推荐阅读
- string - Bash:将字母数字字符串与大小写进行比较
- mysql - 当日期字段为空时,实体框架 asp net MVC 错误它会在编辑操作期间覆盖现有日期
- node.js - 对于相同的地理数据,MongoDB 在 .save() 和 .findOneAndUpdate() 上的不同行为
- javascript - Angular PrimeNG 10 显示,而不是切换,可扩展的表格行
- amazon-web-services - AmazonS3 与 S3Client 之间的区别
- python - TypeError:只有 size-1 数组可以转换为 Python 标量(错误)
- google-analytics - 我的雨果谷歌分析设置不工作
- javascript - 在端点上通过 id 获取用户时遇到问题,有人可以查看我的代码并指导我吗?
- java - 缺少 JDK,需要运行一些 NetBeans 模块我应该怎么做才能修复
- mysql - 没有替换键规范的Mysql索引?