react-router Prompt组件在ios手机上使用手势返回时会想退出在进入,怎么解决这个问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了react-router Prompt组件在ios手机上使用手势返回时会想退出在进入,怎么解决这个问题?相关的知识,希望对你有一定的参考价值。

react-router Prompt组件在ios手机上使用手势返回时会想退出在进入,怎么解决这个问题?

参考技术A 正常情况下的话,如果在这个手机上的话,使用了之后想要退出的话,那么这个时候还是关机了之后重新启动才好 参考技术B 我们手机在手机上使用的时候,首次推出退出之后,进入的怎么来解决这方法?跟这些设置的打开之后就可以操作 参考技术C 退出手机的手机是如果你要进入的话可能是不一样的,如果退出去的。

ZF_react react-router prompt lazy的实现

prompt的实现


可以看到Prompt接受两个入参,一个是when,一个是Message,用来提示,其实就是在当前页面退出去的时候拦截一下,alert一个东西。
实现思路:
在生命周期的时候处理,然后push的时候进行拦截。

使用一个组件LifeCyclle

创建的时候执行block(message),销毁的时候执行销毁函数,这个block是在history拿到的,所以我们必须在histoy定义。

定义一个全局变量



在每次push的时候拦截判断就可以了,看效果:

通过定义全局变量存放message,通过组建的生命周期设置message的值,在push的时候进行一个拦截就可以了。

实现router的hooks

useHistory, useLocation, useRouteMatch, useParams,如上,他们的作用分别是获取对应的对象。这些hooks必须在包裹着Router里面的组件才能用。
useRouterMatch用于传入一个对象匹配当前路劲是否匹配。匹配则返回对象,不匹配则返回null



实现完成。

实现路由的懒加载


React提供了lazy的写法,可以动态引入模块,是固定写法,必须通过()=>import()引入文件,然后使用Suspense包裹,但动态路由还没加载出来的时候,会渲染fallback的react元素来代替。

实现lazy

思路,()=>import()返回的是一个promise,当.then的时候就证明可以渲染组建了。而.then的参数就是该文件导出的内容。

当lazy这个组件被渲染的时候,才去执行load,拿到导出的内容去渲染,从而达到懒加载的效果。

以上是关于react-router Prompt组件在ios手机上使用手势返回时会想退出在进入,怎么解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章

[react-router] React-Router 4怎样在路由变化时重新渲染同一个组件?

React-Router 无法在组件内导入组件

React-Router 组件在转换时卸载

从共享组件库导出`react-router`重定向

React-router - 组件在父组件状态更改时重新加载?

使用 react-router 链接到其他组件