Z ZPI 文档 v0.3.8
介绍页

源码

packages/desktop/src/renderer/use-dialog-dismiss.ts

typescript16 行查看原文
import { useEffect, useRef, useState } from "react";

// Keep conditionally mounted dialogs alive for Radix's 100ms exit animation.
export function useDialogDismiss(onClosed: () => void) {
  const [open, setOpen] = useState(true);
  const callback = useRef(onClosed);
  callback.current = onClosed;
  useEffect(() => {
    if (open) return;
    const delay = window.matchMedia("(prefers-reduced-motion: reduce)").matches ? 0 : 100;
    const timer = setTimeout(() => callback.current(), delay);
    return () => clearTimeout(timer);
  }, [open]);
  return [open, () => setOpen(false)] as const;
}