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

Expo Router中useRouter导航因类型不匹配报错导致应用崩溃

Expo Router中useRouter导航因类型不匹配报错导致应用崩溃

看起来你遇到了Expo Router里useRouter导航时的类型不匹配问题,这种TypeError: expected dynamic type int/double/bool/string', but had type 'object'报错,通常是导航时传递的参数不符合底层要求导致的,我来帮你梳理下常见原因和解决办法:

1. 导航传参时直接传递了对象类型参数

Expo Router的导航参数(不管是通过router.push的第二个参数,还是路由配置里的参数)底层只支持基础数据类型:数字、布尔值、字符串。如果你直接传了对象,就会触发这个报错。

比如你可能写了类似这样的错误代码:

const router = useRouter();
// 错误示例:直接传递对象作为导航参数
router.push('/detail', { userInfo: { id: 123, name: 'Hamado' } });

解决方法:把对象序列化为JSON字符串再传递,目标页面接收后再解析回来:

// 跳转时序列化对象参数
router.push('/detail', { userInfo: JSON.stringify({ id: 123, name: 'Hamado' }) });

// 目标页面接收时解析参数
import { useLocalSearchParams } from 'expo-router';
const params = useLocalSearchParams();
const userInfo = params.userInfo ? JSON.parse(params.userInfo) : null;

2. 动态路由参数误用了非基础类型

如果你的路由是动态路由(比如/user/[userId]),导航时如果不小心把对象当成参数传入,也会触发这个错误。比如:

const router = useRouter();
const user = { id: 456, name: 'Test' };
// 错误示例:直接传递对象给动态路由参数
router.push(`/user/${user}`);

解决方法:确保动态路由参数是基础类型,比如提取对象的ID字段传入:

router.push(`/user/${user.id}`);

3. 快速验证定位问题

你可以先做个简单测试:暂时去掉导航时的所有参数,直接调用router.push('/你的目标路由')。如果这样应用不再崩溃,那100%是参数类型的问题,再回到参数部分针对性处理即可。

备注:内容来源于stack exchange,提问作者Hamado SIMEAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:48:11