当前位置: 首页 > 面试题库 >

使用React-Router检测用户离开页面

蔺昊穹
2023-03-14
问题内容

我希望我的ReactJS应用在离开特定页面时通知用户。特别是一条弹出消息,提醒他/她进行以下操作:

“更改已保存,但尚未发布。现在执行吗?”

我应该在react-router全局范围内触发此操作,还是可以在react页面/组件内完成此操作?

我还没有发现任何关于后者的信息,我宁愿避免使用第一个。除非当然是其规范,否则这使我想知道如何执行这样的事情而不必向用户可以访问的所有其他可能的页面添加代码。

欢迎有任何见解,谢谢!


问题答案:

react-routerv4引入了一种使用阻止导航的新方法Prompt。只需将其添加到您要阻止的组件中即可:

import { Prompt } from 'react-router'

const MyComponent = () => (
  <React.Fragment>
    <Prompt
      when={shouldBlockNavigation}
      message='You have unsaved changes, are you sure you want to leave?'
    />
    {/* Component JSX */}
  </React.Fragment>
)

这将阻止所有路由,但不会阻止页面刷新或关闭。要阻止它,您需要添加以下代码(根据需要使用相应的React生命周期进行更新):

componentDidUpdate = () => {
  if (shouldBlockNavigation) {
    window.onbeforeunload = () => true
  } else {
    window.onbeforeunload = undefined
  }
}

onbeforeunload具有浏览器的各种支持。



 类似资料:
  • 问题内容: 我必须根据浏览历史实现一些业务逻辑。 我想做的是这样的: URL更新后,有什么方法可以接收来自react-router的回调吗? 问题答案: 尝试检测路线变化时,可以使用功能。考虑到您正在使用,请用HOC 包装您的组件以访问道具。 返回一个函数。您将使用它来收听。 您可以像这样配置路线 index.js 然后在 AppContainer.js中 从历史文档: 您可以使用收听当前位置的更

  • 问题内容: 我正在使用Javascript命令:setInterval。我喜欢在用户离开页面时停止它。 该代码似乎运行良好:http : //jsfiddle.net/PQz5k/ 它检测用户何时离开页面。当用户单击链接以转到其他HTML页面或URL,或者用户重新加载页面时,它将执行Javascript代码。 但是,当我从一个AngularJS模板转到另一个模板时,它不起作用。例如,如果我在tem

  • 问题内容: 检测用户是否离开网页的最佳方法是什么? 在JavaScript事件不起作用每次(HTTP请求花费的时间比需要的时间终止浏览器)。 创建一个可能会被当前的浏览器阻止。 问题答案: 尝试以下事件:在页面卸载之前将其触发。它还允许您询问用户是否真的要离开。 另外,您可以在他离开时发送Ajax请求。

  • 问题内容: 使用 withRouter() 时如何获取路由上下文,位置,参数等? 您可以使用withRouter获得该信息,还是必须将这些内容显式传递到组件树中? 问题答案: 因此,不再使用。在道具中都可以使用: 因此,假设您想将用户转到新路线,您只需

  • 问题内容: 有没有一种方法可以检测当前用户是否正在使用jQuery / JavaScript使用iPad? 问题答案: iPad检测 通过查看属性,您应该能够检测到iPad用户: iPhone / iPod检测 同样,用于检查iPhone或iPods等设备的属性:

  • 应用程序要求如下所示: 1) 拥有一个带有简单用户名和密码的登录表单 2)一旦用户提交了登录表单,用户应该导航到主组件 问题: 在发送正确的用户名和密码后,服务器会进行身份验证并发送正确的令牌,但现在我设法在URL中显示正确的路由,但组件没有加载, 这是我的档案 登录信息 行动 index.js store.js 依赖列表 有人能帮我解释一下为什么这条路线不行吗,