javascript - React Router Dom v4 处理浏览器后退按钮

标签 javascript reactjs ecmascript-6 react-router-dom

如何使用 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 函数看起来像下面的钩子(Hook)。

React.useEffect(() => {
    return () => {
            props.history.goForward();
        }
    }, []);

关于javascript - React Router Dom v4 处理浏览器后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51381060/

相关文章:

javascript - ES6 Let Const block 范围在某些变量的循环内部进行

javascript - 在一个选项卡中选中的单选按钮在其他选项卡中未选中

css - MUI 卡片文字叠加

css - 滑动图像高度不一样

javascript - 扩展 react.component 和 '&' 符号

javascript - 为什么不只检查属性而不是使用 ES6 符号

javascript - 如何在 ng-repeat 中格式化 ng-model 日期?

javascript - 谷歌浏览器不阅读 Jsfiddle 程序

javascript - Rails 4 形式 : conditional display of fields based on radio button selection

javascript - 如何使用 React Router 嵌套一些路由?我想保留一个 header 组件