使用Expo Router传递数组参数失败的问题求助
解决Next.js路由传递数组变为字符串的问题
问题核心:useLocalSearchParams获取的是URL查询参数,而URL参数仅支持字符串类型,所以传递数组时会被自动转为逗号分隔的字符串,导致无法用数组索引访问元素。
方案一:JSON序列化传递(适合需要URL携带参数的场景)
传递时把数组转成JSON字符串,接收时再解析回数组:
传递方代码:
const navigation = useRouter(); const cars = ["Saab", "Volvo", "BMW"]; navigation.push({ pathname: '/screen2', params: { carList: JSON.stringify(cars) } })
接收方代码:
const response = useLocalSearchParams(); // 处理参数不存在的情况,避免JSON.parse报错 const carList = response.carList ? JSON.parse(response.carList) : []; console.log(carList[0]); // 输出 "Saab"
方案二:用路由state传递(适合不需要URL暴露参数的场景)
这种方式不会把参数放到URL中,直接通过路由的state传递数组,更安全:
传递方代码:
const navigation = useRouter(); const cars = ["Saab", "Volvo", "BMW"]; // push的第二个参数就是state navigation.push('/screen2', { carList: cars });
接收方代码:
const router = useRouter(); // 用可选链避免state不存在时报错 const carList = router.state?.carList || []; console.log(carList[0]); // 输出 "Saab"
内容的提问来源于stack exchange,提问作者hewa
相关产品推荐
相关产品推荐

