import { useEffect, useState } from "react"; import { Button } from "./ui"; import { applyServiceWorkerUpdate, PWA_EVENT } from "../lib/pwa"; /** * 装到手机/桌面以后,发版就不是"让用户重新输网址"了: * 有新版本时在这里提一句,点"刷新"才换,不点就继续用手上的这版。 * * 为什么不用自动刷新(registerType: "autoUpdate"):Vditor、图表这些是懒加载分片, * 后台悄悄换掉之后,用户下一次点开某个面板就是 404 —— 编辑器直接白屏。 */ export function UpdatePrompt() { const [ready, setReady] = useState(false); const [applying, setApplying] = useState(false); const [dismissed, setDismissed] = useState(false); useEffect(() => { const onReady = () => setReady(true); window.addEventListener(PWA_EVENT.updateReady, onReady); return () => window.removeEventListener(PWA_EVENT.updateReady, onReady); }, []); if (!ready || dismissed) return null; return ( // 居中用 flex 包一层:animate-slide-up 的 keyframes 自带 transform, // 会和 -translate-x-1/2 抢同一个属性,手机窄屏上卡片会被推出屏幕右侧。

有新版了。刷新一下就用上,手头的输入会丢,先存了再点。

); }