【问题标题】:How to clear the deep link after it was opened?深层链接打开后如何清除?
【发布时间】:2023-01-04 16:11:15
【问题描述】:

我有一个反应本机应用程序,在主屏幕上我有打开深层链接的代码。我使用 Linking.getInitialURL() 检查深层链接是否存在,然后如果 initialUrl 存在我重定向用户,这个流程工作正常但深层链接没有被清除。

例如,如果我点击深层链接 myapp://home/gallery 它将我带到画廊屏幕。当我在图库屏幕上单击“返回主页”按钮时,我会转到主屏幕。但是 Linking.getInitialURL() 再次检测到 myapp://home/gallery 链接并将用户重定向回 Gallery 屏幕。只有在此之后,如果我转到主屏幕,initialUtl 为空。第一次打开链接后,如何清除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()
},[])

【问题讨论】:

  • 也许如果您可以添加一些代码,它会更容易提供帮助

标签: android ios reactjs react-native deep-linking


【解决方案1】:

您正在使用 useEffect() 并且在您配置它时它可能会在您加载主屏幕时触发 - 请使用一些日志验证相同的情况。

一般来说,我不会在 useEffect 块中指定函数,而是使用带有 useState() 的 const 来存储链接状态。然后你可以把同样的东西放在useEffect的[linkState]括号里,这样useEffect只会在linkState改变的时候触发。

此外,您在这里使用深层链接,那么我宁愿在导航index.js 中使用相同的代码。这将使您避免像您所面临的任何副作用。

【讨论】:

    【解决方案2】:

    也许在您的情况下,您可以将链接存储在中央状态(如 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()
    },[])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 2012-02-21
      • 2017-07-05
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多