Saltar al contenido principal

Renderizado en el servidor y Next.js

Importar los paquetes, crear el adapter y renderizar en el servidor nunca tocan window, document ni navigator. El servidor renderiza los tokens y tus hijos, y ninguna pieza (a menos que pases initialStatus="offline"). La primera comprobación de conectividad se ejecuta en un efecto tras el montaje; así, la hidratación produce el mismo HTML que el servidor y nada parpadea.

Next.js App Router​

El componente usa estado y efectos, así que colócalo en un componente de cliente:

'use client';

import { OfflineDetector } from '@rogeriodocarmo/offline-detector-web';

export function Offline({ children }: { children: React.ReactNode }) {
return <OfflineDetector>{children}</OfflineDetector>;
}

Luego usa <Offline> en tu layout raíz. Lo mismo vale para cualquier hook del paquete React: solo se ejecuta en componentes de cliente.

initialStatus​

Sin initialStatus, el primer renderizado en el servidor y en el cliente muestra el estado unknown, que isOnline trata como en línea. Pasa initialStatus="offline" cuando sepas más, por ejemplo por una cookie o una cabecera de la petición:

<OfflineDetector initialStatus="offline">{children}</OfflineDetector>

Así, el HTML del servidor y el primer renderizado en el cliente coinciden, y la pista se mantiene hasta que termina la primera comprobación real. Es solo una pista para el primer pintado: si la primera comprobación real encuentra la app en línea, las piezas simplemente desaparecen, sin el mensaje "Conexión restablecida".

Exportación estática​

Un sitio exportado de forma estática (output: 'export' de Next.js, Docusaurus, islas de Astro) funciona igual: nada se ejecuta hasta que la página está en un navegador. La demo en vivo es una exportación estática.

Política de seguridad de contenido​

<OfflineDetector> renderiza un elemento <style> en línea con los tokens --od-* y los estilos de las piezas. Bajo un style-src estricto, sin unsafe-inline, pasa el nonce que usan tus otros estilos en línea:

<OfflineDetector nonce={nonce}>{children}</OfflineDetector>

Los bloques de construcción se exportan por si necesitas armar el tuyo: OfflineTokens (también acepta un nonce) y las constantes offlineTokensCss y offlineCss (el CSS como cadenas). Consulta la referencia web. Este camino no se ha probado con una política real.