encodeURIComponent 被 Expo Router 推送方法忽略

问题描述 投票:0回答:1
const {name} = foo; // "foo 2%"
const encodedName = encodeURIComponent(name); // "foo%20%25"
router.push(`/recipe?&name=${encodedName})}`
              

这实际上不起作用,我不知道为什么。如果我 console.log

encodedName
,我可以看到它已正确编码,但是当您导航到路线并检查参数时,却发现它没有正确编码。

/recipe.jsx

const {name} = useLocalSearchParams() // "foo 2%" <- this has to be a bug

它会使页面崩溃,因为 expo 路由器在尝试解码它时认为它是损坏的 URI 组件。我已经疯了,我已经连续调试了3个小时了。我直接认为这是 expo 路由器中的一个错误。

reactjs react-native url routes expo
1个回答
0
投票

也许这会有帮助:https://stackoverflow.com/a/77883629/3865079

括号对我来说是个问题。这确实是一个错误。

这就是我解决的方法:

const params = {
  ...
  details: JSON.stringify(details).replace(/\((.*?)\)/g, 'EXPO_ROUTER_FIX[$1]'),
};

router.push({
  pathname: '/<path>',
  params,
});

然后我像这样反转它:

const details = JSON.parse(params.details.replace(/EXPO_ROUTER_FIX\[(.*?)\]/g, '($1)'))

这样在接收组件中调用

useLocalSearchParams
时参数不为空,我们只替换我们更改的括号。

© www.soinside.com 2019 - 2024. All rights reserved.