Closed henryzp closed 1 year ago
react router v6 里没有 history 了,所以 umi4 的 history 是外置的,不可变的,不会触发重渲染,可以用 react router v6 的指定切换路由方法 useNavigate
:
import { useNavigate } from 'umi'
const nav = useNavigate()
nav({ search: '?a=1' })
@fz6m ,问题是我不知道怎么的组件要改多少个地方。。
老代码系统特别庞大啊,之前用的一直是umi3呢。。。有没有一个统一的设置入口来进行处理?不然要改的地方,找到一处改一处,有一定的隐患
在顶层 layout 里用 fullpath 处理一下:
import { useLocation } from 'umi';
export default function Layout() {
const location = useLocation()
const fullpath = location.pathname + location.search
return (
<div>
<Outlet key={fullpath} />
</div>
);
}
thx,回头我试试发自我的手机
react router v6 里没有 history 了,所以 umi4 的 history 是外置的,不可变的,不会触发重渲染,可以用 react router v6 的指定切换路由方法
useNavigate
:import { useNavigate } from 'umi' const nav = useNavigate() nav({ search: '?a=1' })
我的路由是这这样的,
nav('/user/123')
更换了id组件也没有重新渲染
需要给一个最小复现。
What happens?
umi4,使用history.push方法,url是当前的url,改变了query参数。。希望组件能得到渲染,但事实上没渲染
Mini Showcase Repository(REQUIRED)
https://github.com/henryzp/my-umi4-test
点击按钮,会发现并没有打印
How To Reproduce
Steps to reproduce the behavior: 1. 2.
Expected behavior 1. 2.
umi3是正常的,在umi4下我通过加了一个
useSearchParams
的hooks,也可以解决这个问题。但是我现在在做umi3升级umi4的工作,不确定这样的页面组件会有这样的问题。所以想问一下是否有全局的配置,还是只能够每个路由组件去加上上面提到的hooks?
Context