【问题标题】:Put A Warning If Page Refresh in ReactJS如果在 ReactJS 中刷新页面,则发出警告
【发布时间】:2021-10-26 03:59:35
【问题描述】:

我的问题是我需要用户确认是否要继续刷新页面。如果他按No,它不会刷新页面。

请看看我到目前为止的发展:-

useEffect(() => {
    window.addEventListener("beforeunload", alertUser);
    return () => {
      window.removeEventListener("beforeunload", alertUser);
    };
  }, []);

【问题讨论】:

  • 你的alertUser是这样定义的吗? const alertUser = (e) => { e.preventDefault(); e.returnValue = ""; };
  • 这能回答你的问题吗? stackoverflow.com/a/64967211/8690857 请参阅第二条关于浏览器支持的说明。
  • @DrewReese。你能完成吗?就像有一个是/否可供选择。谢谢。

标签: reactjs ecmascript-6 react-hooks


【解决方案1】:

如果您想在离开页面前显示某种确认信息,请遵循beforeunload event 指南

根据规范,显示确认对话框 事件处理程序应在事件上调用 preventDefault()。

但请注意,并非所有浏览器都支持此方法,有些浏览器 而是要求事件处理程序实现两个遗留的之一 方法:

  • 将字符串分配给事件的 returnValue 属性
  • 从事件处理程序返回一个字符串。

为了防止不需要的弹出窗口,浏览器可能不会显示创建的提示 在beforeunload 事件处理程序中,除非页面已被交互 有,甚至可能根本不显示。

HTML 规范声明调用window.alert()window.confirm()window.prompt() 方法可能会被忽略 这个事件。有关详细信息,请参阅HTML specification

我刚刚在 chrome 和 safari 中对此进行了测试,它可以工作。我没有 windows 框,但这应该涵盖大多数情况。

useEffect(() => {
  const unloadCallback = (event) => {
    event.preventDefault();
    event.returnValue = "";
    return "";
  };

  window.addEventListener("beforeunload", unloadCallback);
  return () => window.removeEventListener("beforeunload", unloadCallback);
}, []);

【讨论】:

  • 谢谢。顺便说一下怎么自定义消息?
  • @Joseph 你不能 AFAIK... 可能是整个“...打击不需要的弹出窗口...”业务的一部分。我认为通常非常不鼓励实现这样的 nag 屏幕,重点是您可能希望在页面卸载之前清理资源等,而不是打扰用户,或者更具体地说,阻止他们在浏览器。
猜你喜欢
  • 2019-05-15
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
  • 2017-05-04
相关资源
最近更新 更多