From 856aeb868ad06650dbe443092795b5eb1d83567b Mon Sep 17 00:00:00 2001 From: CrescentLeaf Date: Sun, 14 Dec 2025 00:13:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E5=88=87=E6=8D=A2=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/ui/routers/useRouterDialogRef.ts | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/client/ui/routers/useRouterDialogRef.ts b/client/ui/routers/useRouterDialogRef.ts index 15a317a..8144ed9 100644 --- a/client/ui/routers/useRouterDialogRef.ts +++ b/client/ui/routers/useRouterDialogRef.ts @@ -1,31 +1,32 @@ import { Dialog } from "mdui" import useAsyncEffect from "../../utils/useAsyncEffect" import sleep from "../../utils/sleep" -import { useBlocker, useNavigate } from "react-router" +import { BlockerFunction, useBlocker, useNavigate } from "react-router" import * as React from 'react' export default function useRouterDialogRef() { const dialogRef = React.useRef() + const proceedRef = React.useRef<() => void>() const shouldBlock = React.useRef(true) const nav = useNavigate() - const blocker = useBlocker(({ currentLocation, nextLocation }) => shouldBlock.current && currentLocation.pathname !== nextLocation.pathname) + const blocker = useBlocker(React.useCallback(() => shouldBlock.current, [])) // 避免用户手动返回导致动画丢失 React.useEffect(() => { if (blocker.state === "blocked") { + proceedRef.current = blocker.proceed // 这个让姐姐来就好啦 dialogRef.current!.open = false } - }, [blocker]) + }, [blocker.state]) useAsyncEffect(async () => { await sleep(10) dialogRef.current!.open = true dialogRef.current!.addEventListener('closed', async () => { - await sleep(10) - // 无论如何, 让姐姐先解除返回限制, 这样才能出去嘛 shouldBlock.current = false - nav(-1) + await sleep(10) + proceedRef.current ? proceedRef.current() : nav(-1) }) }, []) return dialogRef