如果我的页面在react-router-dom
V6中有未保存的更改(isDirty: true
),我能够捕获推送事件并控制导航,而我不能为POP事件包装我的头.似乎navigator
从NavigationContext
没有直接expose 的流行事件使用.有谁能帮忙吗?
我的推送事件代码如下所示-
import { useEffect } from 'react';
import { UNSAFE_NavigationContext as NavigationContext } from 'react-router-dom';
const useConfirmExit = function (confirmExit: () => Promise<boolean>, when = true, callbackfn: (arg0: any) => void): void {
const {navigator} = useContext(NavigationContext);
useEffect(() => {
if (!when) {
return () => { };
}
const {go, push} = navigator;
navigator.push = async (...args: Parameters<typeof push>) => {
const result = await confirmExit();
if (result !== false) {
callbackfn(arg0);
push(...args);
}
};
navigator.go = async (delta: number) => {
const result = await confirmExit();
if (result !== false) {
go(delta);
}
};
return () => {
navigator.push = push;
navigator.go = go;
};
}, [navigator, confirmExit, when]);
};
confirmExit
只是另一个异步函数,它接受用户的输入,如果他们想要导航离开未保存的页面.