Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何在重新加载时在safari上获取警报弹出窗口_Reactjs_Safari_Onbeforeunload - Fatal编程技术网

Reactjs 如何在重新加载时在safari上获取警报弹出窗口

Reactjs 如何在重新加载时在safari上获取警报弹出窗口,reactjs,safari,onbeforeunload,Reactjs,Safari,Onbeforeunload,在我的react项目中,我在重新加载或关闭选项卡时为警报用户创建了一个自定义挂钩 定制挂钩 。。。。 const useTabClosewarning=(message=“确实要关闭吗?”)=>{ 常量[isDirty,setIsDirty]=useState(false); useffect(()=>{ //检测浏览器关闭 window.onbeforeunload=isDirty&(()=>消息); return()=>{ window.onbeforeunload=null; }; },[

在我的react项目中,我在重新加载或关闭选项卡时为警报用户创建了一个自定义挂钩

定制挂钩
。。。。
const useTabClosewarning=(message=“确实要关闭吗?”)=>{
常量[isDirty,setIsDirty]=useState(false);
useffect(()=>{
//检测浏览器关闭
window.onbeforeunload=isDirty&(()=>消息);
return()=>{
window.onbeforeunload=null;
};
},[isDirty]);
常量routerPrompt=;
返回[routerPrompt,()=>setIsDirty(true),()=>setIsDirty(false)];
};
....
组成部分
。。。。
const[Prompt,setDirty,setPristine]=useTabClosewarning();
useffect(()=>{
setDirty(真);
}, []);
返回(
{Prompt}
)
....
这在除safari之外的所有浏览器中都能正常工作。如何在safari中也实现这一点

....
const useTabClosewarning = (message = "Are you sure you want to close?") => {
  const [isDirty, setIsDirty] = useState(false);

  useEffect(() => {
    // Detecting browser closing
    window.onbeforeunload = isDirty && (() => message);

    return () => {
      window.onbeforeunload = null;
    };
  }, [isDirty]);

  const routerPrompt = <Prompt when={isDirty} message={message} />;

  return [routerPrompt, () => setIsDirty(true), () => setIsDirty(false)];
};
....
....
const [Prompt, setDirty, setPristine] = useTabClosewarning();

useEffect(() => {
    setDirty(true);
  }, []);

return (
    <>
      {Prompt}
    </>
)
....