Closed hyzx86 closed 1 year ago
如果官方不能接受的话 就先用 pnpm patch 处理下了
有 Breaking change ,所以现在就先不改了,全用 useLocation 就可以,base 也不是我们需要关注的。
有 Breaking change ,所以现在就先不改了,全用 useLocation 就可以,base 也不是我们需要关注的。
关键 。。useLocation 不是随处可用的。比如 请求拦截的地方 用不了 hook
有 Breaking change ,所以现在就先不改了,全用 useLocation 就可以,base 也不是我们需要关注的。
umi4和umi3文档中并未提及到此处的不兼容,建议可以补充到文档中。当前全部升级后才发现这里是不兼容的。 导致进退两难
如果用到了 history.location.pathname
,自己修改一下所有代码引用的地方去掉 basename 就可以了,basename 可以用 define
注入到项目里:
- history.location.pathname
+ import { getPathname } from '@/location'
+ getPathname()
// src/location.ts
export const getPathname = () => {
return history.location.pathname ? history.location.pathname.slice(__BASE__.length) : history.location.pathname
}
// .umirc.ts
base: '/base-path',
define: {
__BASE__: '/base-path'
}
现在 react router v6 已经全面切换到 hooks 方式获取 location 和 navigate 了,不外置 history ,之所以可以用 history 只是 umi 现在的一个 hack ,未来肯定是 hooks 方向的,要尽早摆脱直接使用 history ,尽量使用原生 react router 的 hooks 方法(useLocation
/ useNavigate
等)。
请问
history.location.pathname
和useLocation
不一样 有办法全局处理掉吗?history.location.pathname
和useLocation
不一样是一些历史问题,目前可以自己把 base 的部分定义成环境变量再自己拼一下或者 trim 下:文档不用修改,写的没问题,使用
runtimePublicPath
的时候是在 runtime 修改 publicPath ,你这个场景是固定的publicPath
,所以和这个选项无关。Originally posted by @fz6m in https://github.com/umijs/umi/issues/10189#issuecomment-1368703068