Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

261
Vistas
Evite el parpadeo de la página en Next.js 12 con el modo oscuro basado en la clase Tailwind CSS

¿Cómo se puede evitar que la página parpadee cuando se usa el modo oscuro basado en clases en Tailwind CSS con Next.js v12 sin usar paquetes de terceros como los siguientes temas?

he mirado:

  • estas preguntas y respuestas ¿Cómo corregir el parpadeo del color de fondo del modo oscuro en NextJS? y si bien es una solución válida/funcional en Next.js <v12, en v12 ya no funciona y arroja advertencias en desarrollo que sorprendentemente se convierten en un error de bloqueo de compilación en prod env Do not add <script> tags using next/head (see inline <script>). Use next/script instead. See more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component
  • Sin embargo, este artículo https://www.vidyasource.com/blog/dark-mode-nextjs-tailwindcss-react-hooks incluye el script <Script strategy="beforeInteractive" src="/scripts/darkMode.js"/> en un destello de página, ya que agrega defer en la head
  • Este documento oficial del modo oscuro de Tailwind CSS sobre lo que se requiere https://tailwindcss.com/docs/dark-mode#toggling-dark-mode-manually
 // On page load or when changing themes, best to add inline in `head` to avoid FOUC if (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { document.documentElement.classList.add('dark') } else { document.documentElement.classList.remove('dark') }

Creo que restringen poner cosas en Head desde v12 para prepararse para Suspense/Streaming/React v18.

De cualquier manera, no sé cómo hacerlo sin los siguientes temas, ¿alguien sabe cómo podemos inyectar ese fragmento de secuencia de comandos para evitar que la página parpadee?

Espero que esta pregunta tenga sentido, si no, por favor dame un grito.

Me gustan las cosas simples y minimalistas, de ahí el objetivo de reducir la dependencia de paquetes de terceros, algo tan simple debería ser posible sin una solución demasiado complicada, en mi opinión.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tuve el mismo problema y lo resolví así en Next 12.1.0:

  1. Cree theme.js dentro de la carpeta public (la mía tiene el siguiente contenido):
 ;(function initTheme() { var theme = localStorage.getItem('theme') || 'light' if (theme === 'dark') { document.querySelector('html').classList.add('dark') } })()
  1. Agregue <Script src="/theme.js" strategy="beforeInteractive" /> a _app.tsx o _app.jsx . Esto es importante: intenté ponerlo dentro _document.tsx , que no funcionó. El _app.tsx final se ve así:
 import '../styles/globals.css' import type { AppProps } from 'next/app' import Head from 'next/head' import Script from 'next/script' function App({ Component, pageProps }: AppProps) { return <> <Head> <meta name="viewport" content="initial-scale=1.0, width=device-width" /> </Head> <Script src="/theme.js" strategy="beforeInteractive" /> <Component {...pageProps} /> </> } export default App

Funciona de maravilla para mí: sin parpadeos y toda la magia de Next.js. :) Espero que esto funcione para usted también.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda