在React App中阻止导航

时间:2017-10-03 18:08:01

标签: javascript reactjs react-router

我在React中遇到导航阻止问题。

我使用React + Redux和React Router。我一直在使用该组件,以防止在React中导航不完整的表单。只要导航实际上在React中,这就可以正常工作。但是,它不会阻止通过URL输入或点击外部超链接进行导航。

React中是否有可接受的方法来处理外部超链接并阻止React以外的导航?

2 个答案:

答案 0 :(得分:2)

你这里没有提供任何代码,所以我想猜测一下。如果我理解正确,您可以通过react-router管理内部重定向,并认为React应用程序没有任何问题。

根据你的陈述:

  

但是,它不会阻止通过URL输入或点击外部超链接进行导航。

让我们解决这两个问题。首先不能阻止用户进入导航栏并输入新的URL,这是在浏览器方面设计完成的,这对用户来说是不好的,当然也是侵入性的!

但是关于您点击链接的第二个问题,该链接会将您发送到您的域名或应用程序之外,您可以对此采取一些措施。

这里有多个选项,我会给你三个:

首先:使用history.block

您可以阻止或更好地说,请用户使用history.block

确认转换到其他页面

作为历史文档的一个例子:

const unblock = history.block('Are you sure you want to leave this page?')

第二:使用history.push而不是href

只是不要使用锚元素href,而是依赖于history的{​​{1}}。

您可以在此处详细了解:react-router/history

但基本上你可以使用历史记录中的push方法连接你的重定向,它看起来像:

react-router

第三:使用带条件渲染的重定向组件

然后您还有其他选项,例如使用条件渲染和Redirect组件,但另一种方法足以解决您的问题。

答案 1 :(得分:1)

我认为您正在寻找React Router的历史API下的阻止转换。

根据反应路由器历史记录github页面上的示例:

您可以注册一条简单的提示消息,该消息将在用户离开当前页面之前显示给用户。

const unblock = history.block('Are you sure you want to leave this page?')

https://github.com/ReactTraining/history#properties

的详细信息