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 路由器中的一个错误。
也许这会有帮助: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
时参数不为空,我们只替换我们更改的括号。