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

Expo SDK 52升级后Router路由参数无法传递求助

解决方案

1. 修正路由跳转路径

你的跳转路径中多余了routes前缀,Expo Router的路由路径基于app目录下的文件结构,需要去掉该前缀。假设当前页面和workoutDetail同属app/routes目录,跳转代码应改为:

onPress={() => router.push(`./workoutDetail?id=${workout.id}`)}

如果当前页面在app/routes的子目录下,需调整相对路径层级,比如从app/routes/sub/page.tsx跳转到app/routes/workoutDetail.tsx,路径应为../workoutDetail?id=${workout.id}。

2. 改用对象式传参(更可靠)

避免字符串拼接可能带来的编码问题,推荐用对象形式传递参数:

onPress={() => router.push({
  pathname: './workoutDetail', // 根据实际路径调整
  params: { id: workout.id }
})}

3. 正确获取参数

方式一:使用useLocalSearchParams(推荐用于查询参数)

import { useLocalSearchParams } from 'expo-router';

const params = useLocalSearchParams();
const id = params.id; // 返回为字符串类型,如需数字可转换为Number(id)

方式二:使用useRoute(React Navigation原生钩子)

若坚持使用route.params,需确保路径匹配正确,同时导入useRoute:

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

const route = useRoute();

useEffect(() => {
  const workoutId = route.params?.id;
  if (workoutId) {
    fetchWorkoutDetails(workoutId);
  }
}, [route.params?.id]);

4. 检查路由文件结构

确保workoutDetail页面的文件位置与跳转路径对应,例如:

  • 若跳转路径是./workoutDetail,文件应位于app/routes/workoutDetail.tsx(或.jsx)
  • 文件名避免特殊字符,保证路由能正确匹配

5. 确认依赖版本

SDK52对应Expo Router版本为~3.5.20,检查package.json中的依赖是否正确:

{
  "dependencies": {
    "expo-router": "~3.5.20"
  }
}

如果版本不符,运行npx expo install expo-router重新安装适配版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:45:05