You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Navigation Deeplink在App关闭时参数返回undefined的问题求助

解决React Native 0.68 + React Navigation 6.x Android冷启动DeepLink参数undefined问题

问题分析

当前核心问题:App冷启动时点击DeepLink可跳转至对应页面,但无法解析获取路径参数;热启动(前台/后台状态)时参数解析正常。结合配置与日志,问题根源在于linking配置的拼写错误,以及冷启动阶段的初始URL处理逻辑缺失。

解决方案

1. 修正Linking配置的大小写错误

你的linking配置中使用了大写的Config,但React Navigation v6.x要求该字段为小写的config。大写字段无法被框架识别,直接导致冷启动时参数解析失败。

同时清理配置中多余的嵌套screens节点,避免层级错误干扰参数解析:

import { Linking } from 'react-native';

const linking = {
  prefixes: ["myapp://"],
  // 修正为小写config
  config: {
    screens: {
      init: {
        path: "init",
        initialRouteName: "main",
        screens: {
          main: {
            path: "main",
            screens: {
              home: {
                path: "home",
                screens: {
                  eventlist: {
                    path: "eventlist",
                  },
                  eventdetails: {
                    path: "eventdetails/:id",
                    parse: {
                      id: (id: any) => `${id}`,
                    },
                  },
                  truckdetails: {
                    path: "truckdetails/:id",
                    parse: {
                      id: (id: any) => `${id}`,
                    },
                  },
                },
              },
            },
          },
        },
      },
    },
  },
  // 手动配置冷启动时获取初始URL,确保参数解析逻辑触发
  getInitialURL: async () => {
    const url = await Linking.getInitialURL();
    return url;
  },
};

2. 页面内正确获取参数

在eventdetails页面,使用useRoute()钩子获取路由参数:

import { useRoute } from '@react-navigation/native';

function EventDetailsScreen() {
  const route = useRoute();
  // 安全获取解析后的id参数
  const { id } = route.params || {};
  console.log('解析后的参数id:', id);

  return (
    // 页面内容
  );
}

3. 验证AndroidManifest配置

确保AndroidManifest.xml中正确配置DeepLink的intent-filter,并设置launchMode为singleTask,避免重复启动Activity导致参数丢失:

<activity
  android:name=".MainActivity"
  android:launchMode="singleTask">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
  <!-- DeepLink拦截配置 -->
  <intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="myapp" />
  </intent-filter>
</activity>

测试验证

  1. 完全关闭App,执行命令:npx uri-scheme open myapp://init/main/home/eventdetails/1234 --android
  2. 启动App后查看eventdetails页面的日志,确认id参数正常显示为1234

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:50:20