在electron中有什么方案可以替代React Prompt来实现React路由变化时弹出确认对话框
在网页端的时候我们通常用React的Prompt组件来监听location(如下代码)
<Prompt
message={(location) => {
// React路由变化时,弹出提示窗
if (location.pathname === this.getPath()) {
// 会触发两次,屏蔽第二次结果
return false;
}
if (isLeave) { //一个flag
return true;
}
let leave = window.confirm("确定离开吗?");
if (!leave) { // 取消
this.props.history.push(this.getPath());
return false;
} else { // 确定
return true;
}
}}
/>
但是到了electron环境里面就不管用了,因为electron不支持Prompt(关于Prompt和Electron冲突的机制可以看看这个issue:https://github.com/electron/electron/issues/472),那么在这种环境下(我的react-router-dom版本是5.1.2)有什么方案去监听React路由变化,弹出确认对话框呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一句流行的句式:先问是不是,再问怎么做
electron怎么就不支持
Prompt
了?我猜可能是你用的
BrowserRouter
而
BrowserRouter
是需要web server
支持的(e.q, nginx的try_files, webpack-dev-server的historyApiFallback)如果你的electron调用的本地html文件, 那么
BrowserRouter
就无效了, 建议使用HashRouter
或者MemoryRouter
=============================================================
你的描述让我做了回阅读理解
window.prompt不等于react-router-dom的Prompt
实际上,如果只是要弹一个确认框的话你之前的代码完全够用了
<Prompt message="Are u sure you want to leave?" />
如果要像prompt这样拿一些用户输入的话加一点变通的方法好了
Prompt总是返回false 调用一个异步方法进行处理, 比如:
showMessageBox
客户用任何你想用的手段替换,比如一个React Dialog组件