我有一个react原生应用程序,在主屏幕上有打开深层链接的代码。我使用Linking.getInitialURL()
检查深层链接是否存在,如果存在initialUrl,则重定向用户,此流程工作正常,但深层链接未被清除。
例如,如果我点击深层链接myapp://home/gallery,它会将我带到Gallery屏幕。当我点击Gallery屏幕上的Go Home按钮时,我会转到主屏幕。但Linking.getInitialURL()
检测到myapp://home/gallery链接并将用户重定向回Gallery屏幕。只有在此之后,如果我转到主屏幕,initialUtl为null。在链接已经第一次打开后,我如何清除Linking.getInitialURL()
,为什么react-native没有检测到它?
我试着在每次屏幕聚焦时检查Linking.getInitialURL()
(通过刷新屏幕),但用户第一次从画廊回家时,Linking.getInitialURL()
仍然返回深度链接。
任何帮助和建议是感激的。
编辑(添加的代码)
// Home screen
useEffect(()=> {
const getLink = async () => {
const link = Linking.getInitialURL()
if (link){
await Linking.openURL(url)}
}
getLink()
},[])
2条答案
按热度按时间imzjd6km1#
您正在使用useEffect(),并且在您配置它时,它可能会在您加载主屏幕时触发-请使用一些日志进行验证。
一般来说,我不会在useEffect块中指定函数,而是使用一个const和
useState()
来存储link的状态,然后您可以将其放在useEffect中的[linkState]
括号中,这样useEffect只会在linkState发生变化时触发。此外,你在这里工作的深度链接,那么我宁愿有相同的代码在导航
index.js
。这将使您避免任何副作用,像你所面临的。sirbozc52#
也许在您的情况下,您可以将链接存储在中央状态(如redux)中,并将即将打开的链接与中央状态中的链接进行比较。
此外,我认为RN建议在打开链接之前使用canOpenURL检查链接。
就像这样