expo-router的useSearchParams报错,求替代Hook适用场景及选型
问题解答
关于useSearchParams是否存在
在expo-router v2及后续版本中,useSearchParams已经被移除,官方将其拆分为useLocalSearchParams和useGlobalSearchParams两个Hook,这就是你报错的直接原因。
useLocalSearchParams与useGlobalSearchParams的适用场景
- useLocalSearchParams:用于获取当前路由页面的本地搜索参数,这类参数仅对当前页面生效——比如从列表页跳转到详情页时携带的
?id=xxx参数,只在详情页能读取到,不会影响其他路由栈的页面。 - useGlobalSearchParams:用于获取全局共享的搜索参数,这类参数会作用于整个路由栈——比如在Tab导航的所有页面中需要共享的筛选条件,修改该参数会同步影响所有监听它的页面。
你的示例中应该选哪个?
你的代码是在JobDetails页面获取跳转时携带的job_id参数,属于当前页面的本地路由参数,因此应该使用useLocalSearchParams。
修改后的代码如下:
import { Stack, useRouter, useLocalSearchParams } from 'expo-router' const JobDetails = () => { // 获取当前页面的路由参数 const params = useLocalSearchParams(); const router = useRouter(); const { data, isLoading, error, refetch } = useFetch("job-details", { job_id: params.id, }) return ( <SafeAreaView style={{ flex: 1, backgroundColor: COLORS.lightWhite}}> <Stack.Screen></Stack.Screen> </SafeAreaView> ) } export default JobDetails
内容的提问来源于stack exchange,提问作者user985216
相关产品推荐
相关产品推荐

