Expo Router Link二次及以上跳转无法传递参数问题排查
问题原因与解决方法
问题出在参数传递的字段使用错误:
- Expo Router的
Link组件中,href对象里的params是给动态路由的路径参数用的(比如路由是/page2/[id]时,用来填充id的路径值); - 而你用
useSearchParams()获取的是URL查询参数(即?id=10&name=Test格式的参数),这类参数需要放在query字段里传递。
之前的写法中,首次跳转时组件是全新挂载,路由初始化时意外读取到了params的值,但返回后再次跳转时,Expo Router复用了缓存的page2路由实例,错误的参数传递方式导致useSearchParams()无法获取到更新后的参数,返回undefined。
修改后的代码
<Link href={{ pathname: '/page2', query: { // 将params替换为query id: 10, name: "Test", } }} > <Text>Go to page 2</Text> </Link> <Link href={{ pathname: '/page1', }} > <Text>Go to page 1</Text> </Link>
补充说明:如果你的page2是动态路由(比如app/page2/[id]/index.js结构),那确实需要用params传递参数,但此时获取参数要使用useLocalSearchParams()而非useSearchParams()。从你的需求来看,使用query字段传递查询参数才是正确匹配useSearchParams()的用法。
内容的提问来源于stack exchange,提问作者Abraham G.
相关产品推荐
相关产品推荐

