pro-components
pro-components copied to clipboard
🐛[BUG]使用hash路由配合Protable的syncToUrl参数时,searchParams参数始终保留的问题
🐛 bug 描述
syncToUrl是ProTable中用来将查询参数和url进行同步的一个选项配置,当我的项目使用hash路由时,在不同页面进行导航进行切换时,它会始终保留上一个页面的searchParams。
📷 复现步骤
syncToUrl: (values, type) => {
if (type === 'get') {
return values;
}
return values;
}
页面进行导航时,我使用的是react-router-dom的Link以及useNavigate()
当我使用了syncToUrl选项后,那么url test.com/#/home 会变成 -> test.com/?current=1&pageSize=10#/home,你会发现查询参数在hash之前。我去查看syncToUrl的实现代码,这是因为syncToUrl使用了标准的URL api在修改searchParams,@umijs/use-paramsa源码地址,URL的标准格式,查询参数是在hash之前的。
随后我进行页面导航 <Link to='about'>text</Link> 页面会从test.com/?current=1&pageSize=10#/home变为 test.com/?current=1&pageSize=10#/about,你会发现只有hash的位置变了,searchParams没有发生变化,依旧保留着原来的位置。
另一个问题是当url是test.com/?current=1&pageSize=10#/home这种格式时,我使用 react-router-dom提供的 useSearchParams()是获取不到searchParams的,看起来react-router官方团队也只有把查询参数放在url尾部才取得到的,回答链接
我查了一下之前的issue,好像这个问题是已知的,不过一直未处理,只是推荐开发者使用history路由,我的想法是,既然ProComponent是基于react和react-router-dom的,那么可以试着处理一下这个问题。
🏞 期望结果
我期望syncToUrl在hash路由模式下可以让url变成test.com/#/home?current=1&pageSize=10,从而让页面导航时,将上一个页面的searchParams清空,且让 react-router-dom的 useSearchParams()可以获取到url上面的查询参数
© 版本信息
- ProComponents 版本: [2.7.15]
- umi 版本
- 浏览器环境 Google Chrome 版本 129.0.6643.2(正式版本)dev (arm64)
- 开发环境 [mac OS]
顶一下,同样的问题
再来顶一下
再来顶一下
我目前的解决方法方案是这样,不知道能不能解决你的问题
import { useUrlSearchParams } from '@umijs/use-params'; import { mapValues } from 'lodash'; const [searchParams,setSearchParams] = useUrlSearchParams(); useEffect(() => { setSearchParams(mapValues(searchParams, () => undefined) as any); return () => { setSearchParams(mapValues(searchParams, () => undefined) as any); }; }, []);