在 React Router v5 中,历史对象有一个监听方法。使用该方法,我编写了一个 usePathname 挂钩来在路径更改时重新呈现组件。在 React Router v6 中,这个方法不再存在。像这样的事情有替代方案吗?我不想使用 useLocation 因为如果状态发生变化它也会呈现,而在本例中我不需要。
该钩子与 v5 一起使用。
import React from "react";
import { useHistory } from "react-router";
export function usePathname(): string {
let [state, setState] = React.useState<string>(window.location.pathname);
const history = useHistory();
React.useLayoutEffect(
() =>
history.listen((locationListener) => setState(locationListener.pathname)),
[history]
);
return state;
}
Run Code Online (Sandbox Code Playgroud) 我基本上是想拦截路线变化。也许React Router v6beforeEach中类似于 vue 的东西可能有用,因为 React Router v.6不包含.usePrompt
在每次路线更改之前,我想做一些逻辑 - 该逻辑可能需要中断甚至根据结果更改最终路线。
我已经四处寻找,但我真的找不到解决这个特定问题的东西。
提前致谢。