Capítulo 77 de 456
O componente next/script otimiza o carregamento de scripts de terceiros, controlando quando e como eles executam em relação à hidratação da página.
<Script> dentro de um layout carrega o script uma única vez para todas as rotas daquele layout e suas rotas aninhadas.<Script> no root layout carrega o script globalmente, uma única vez, em qualquer rota acessada.strategy: controla o timing de carregamento — beforeInteractive (antes de qualquer código Next.js/hidratação), afterInteractive (padrão, logo após hidratação parcial), lazyOnload (idle time do browser), worker (experimental, via web worker/Partytown).id explícito para o Next.js rastrear e otimizar; podem usar children com template string ou dangerouslySetInnerHTML.onLoad, onReady, onError): só funcionam em Client Component ('use client').nonce, data-*) é encaminhado automaticamente pro elemento <script> final.import Script from 'next/script'
export default function DashboardLayout({ children }: { children: React.ReactNode }) {
return (
<>
<section>{children}</section>
<Script src="https://example.com/script.js" />
</>
)
}
'use client'
import Script from 'next/script'
export default function Page() {
return (
<Script
src="https://example.com/script.js"
onLoad={() => console.log('Script has loaded')}
/>
)
}
onLoad exige 'use client'.| Strategy | Quando carrega |
|---|---|
beforeInteractive | Antes de qualquer código Next.js e hidratação |
afterInteractive (padrão) | Logo após hidratação parcial |
lazyOnload | Durante idle time do browser |
worker (experimental) | Em web worker via Partytown, ainda não funciona no App Router |
id: Next.js não consegue rastrear/otimizar o script sem esse atributo.<Script> ao layout mais específico possível em vez do root layout.strategy="worker" ainda é experimental e não funciona no App Router.onLoad/onReady/onError) exigem Client Component.next/script e wrappers para libs de terceiros.