diff --git a/src/app/offline/page.tsx b/src/app/offline/page.tsx index 045b254fc7..a280f45814 100644 --- a/src/app/offline/page.tsx +++ b/src/app/offline/page.tsx @@ -1,25 +1,24 @@ "use client"; -import { useEffect, useState } from "react"; +import { useSyncExternalStore } from "react"; import Link from "next/link"; +function subscribeToOnline(callback: () => void) { + window.addEventListener("online", callback); + window.addEventListener("offline", callback); + return () => { + window.removeEventListener("online", callback); + window.removeEventListener("offline", callback); + }; +} + export default function OfflinePage() { - const [isOnline, setIsOnline] = useState(() => - typeof navigator !== "undefined" ? navigator.onLine : true + const isOnline = useSyncExternalStore( + subscribeToOnline, + () => navigator.onLine, + () => false ); - useEffect(() => { - const onOnline = () => setIsOnline(true); - const onOffline = () => setIsOnline(false); - - window.addEventListener("online", onOnline); - window.addEventListener("offline", onOffline); - return () => { - window.removeEventListener("online", onOnline); - window.removeEventListener("offline", onOffline); - }; - }, []); - return (