【问题标题】:Deeplinking in React Native with Navigation v5使用 Navigation v5 在 React Native 中进行深度链接
【发布时间】:2020-10-09 05:15:27
【问题描述】:

我正在尝试使用导航 v5 在 React Native 中使用 Deeplinking。我在关注官方documentation

但使用官方文档中提到的配置结构似乎存在问题。

config 看起来像这样

  const config = {
  screens: {
    Home: {
      initialRouteName: 'Home',
      screens: {
        NPM: {
          screen: {
            CameraNPM: {
              path: 'CameraNPM/:cameraview',
              params: {cameraview: 3},
            },
          },
        },
      },
    },
    ImagePicker: {
      path: 'ImagePicker/:id',
      params: {
        id: 0,
      },
      parse: {
        id: (id: string) => `user-${id}`,
      },
      stringify: {
        id: (id: string) => id.replace(/^user-/, ''),
      },
    },
    Geolocation: 'Geolocation',
    NotFound: '*', //error!
  },
};

linking

  const linking = {
  prefixes: ['url://homescreen://', 'homescreen://'],
  config: {config},
};

这个结构工作正常,但打字稿抱怨没有在linking 变量中添加screens 标记。此外,NotFound: '*" (unmatched route) 添加上述结构会导致崩溃。

如果我在config: {config} 前加上screens (screens{config: {config}}),那么打字稿将停止抱怨,并且不匹配的路线不会导致任何崩溃,但嵌套导航不起作用。

我做错了什么?

谢谢。

【问题讨论】:

    标签: react-native react-navigation react-navigation-v5


    【解决方案1】:

    你必须改变这个:

    const linking = {
        prefixes: ['url://homescreen://', 'homescreen://'],
        config: { config } 
    }
    

    const linking = {
        prefixes: ['url://homescreen://', 'homescreen://'],
        config: config 
    }
    

    甚至更短:

    const linking = {
        prefixes: ['url://homescreen://', 'homescreen://'],
        config
    }
    

    第一个选项(您正在使用的那个)将产生一个具有以下结构的变量:

    {
        prefixes: Array<string>,
        config: {
            config: {
                // Your actual config
            }
        }
    }
    

    因为你是这样传递它的:config: { config } 而不是 config: config 或简单的 config。您可能对尝试执行 config: { ...config } 感到困惑,这将按预期工作,但在这种情况下是不必要的。

    【讨论】:

    • 谢谢@Yanick。使用这个嵌套导航器的CameraNPM 没有得到解决。当我这样做时什么都没有发生npx uri-scheme open homescreen://Home/NPM/CameraNPM?cameraview=45 --android
    • 那是因为您还没有为HomeNPM 定义任何路径。只需打开homescreen://CameraNPM?cameraView=45 即可。您还应该在 NPM 配置中将 screen 键重命名为 screens
    • 感谢您的回复。 homescreen://NPM/CameraNPM?cameraview=45 为我工作。
    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 2017-09-18
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多