在 React 项目中,我创建了一个弹出模式,当任何用户尝试在输入字段中进行任何更改并导航到其他屏幕时,都会显示该模式。它没有按预期工作,因此浏览了很多帖子来找到解决方案,但没有运气。请参考下面的代码:
useBlock.js
import {useContext, useEffect} from 'react';
import { UNSAFE_NavigationContext as NavigationContext} from 'react-router-dom';
const useBlocker = (blocker, when = true) => {
const navigator = useContext(NavigationContext).navigator
useEffect(() => {
if (!when)
return;
const unblock = navigator.block((tx) => { <-- This line is creating an issue
const autoUnblockingTx = {
...tx,
retry() {
unblock();
tx.retry();
},
};
blocker(autoUnblockingTx);
});
return unblock;
}, [navigator, blocker, when]);
}
export default useBlocker
Run Code Online (Sandbox Code Playgroud)
useCallbackPrompt.js
import { useCallback, useEffect, useState } from 'react'; …Run Code Online (Sandbox Code Playgroud)