reactjs 被开通后,深度链接如何清零?

vkc1a9a2  于 2023-01-04  发布在  React
关注(0)|答案(2)|浏览(104)

我有一个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()
},[])
imzjd6km

imzjd6km1#

您正在使用useEffect(),并且在您配置它时,它可能会在您加载主屏幕时触发-请使用一些日志进行验证。
一般来说,我不会在useEffect块中指定函数,而是使用一个const和useState()来存储link的状态,然后您可以将其放在useEffect中的[linkState]括号中,这样useEffect只会在linkState发生变化时触发。
此外,你在这里工作的深度链接,那么我宁愿有相同的代码在导航index.js。这将使您避免任何副作用,像你所面临的。

sirbozc5

sirbozc52#

也许在您的情况下,您可以将链接存储在中央状态(如redux)中,并将即将打开的链接与中央状态中的链接进行比较。
此外,我认为RN建议在打开链接之前使用canOpenURL检查链接。
就像这样

const { centrallyStoredDeepLink } = someCentralStore;

// Home screen

useEffect(()=> {

const getLink = async () => {

const link = Linking.getInitialURL()

if (link && link !== centrallyStoredDeeplink && (await Linking.canOpenURL(link)){
centrallyStoredDeepLink = link; //You'll have to use your stores code for setting here
await Linking.openURL(url)}
}

getLink()
},[])

相关问题