React Navigation Deeplink在App关闭时参数返回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>
测试验证
- 完全关闭App,执行命令:
npx uri-scheme open myapp://init/main/home/eventdetails/1234 --android - 启动App后查看
eventdetails页面的日志,确认id参数正常显示为1234
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

