Capítulo 51 de 456
Reduz o JavaScript inicial de uma rota adiando o carregamento de Client Components e bibliotecas até serem necessários, via next/dynamic (composição de React.lazy() + Suspense) ou React.lazy() direto.
next/dynamic: composto de React.lazy() + Suspense, funciona igual em app e pages.ssr: false: desativa o prerendering (SSR) de um Client Component; só funciona dentro de Client Components, não em Server Components.loading: opção do dynamic() para renderizar um componente de fallback enquanto o módulo carrega..then((mod) => mod.Nome).webpackIgnore/turbopackIgnore (pula bundling, deixa import em runtime) e turbopackOptional (Turbopack only, suprime erro de build para módulo que pode não existir, mas lança MODULE_NOT_FOUND em runtime se ausente). Só funcionam com import()/require()/require.resolve()/new Worker() dinâmicos, não com import estático.// app/page.js — Client Components dinâmicos
'use client'
import { useState } from 'react'
import dynamic from 'next/dynamic'
const ComponentA = dynamic(() => import('../components/A'))
const ComponentB = dynamic(() => import('../components/B'))
const ComponentC = dynamic(() => import('../components/C'), { ssr: false })
export default function ClientComponentExample() {
const [showMore, setShowMore] = useState(false)
return (
<div>
<ComponentA />
{showMore && <ComponentB />}
<button onClick={() => setShowMore(!showMore)}>Toggle</button>
<ComponentC />
</div>
)
}
// Named export
const ClientComponent = dynamic(() =>
import('../components/hello').then((mod) => mod.Hello)
)
.then().// Magic comments
const runtime = await import(/* webpackIgnore: true */ 'runtime-module')
const plugin = await import(/* turbopackIgnore: true */ pluginPath)
const feature = await import(/* turbopackOptional: true */ './optional-feature')
ssr: false em Server Component: gera erro; a opção só é válida dentro de Client Components.webpackOptional: não existe/não é suportado, usar turbopackOptional no Turbopack.next/dynamic se aplica a Client Components e libs externas.ssr: false apenas dentro de Client Components para pular prerendering.fuse.js) sob demanda com import() dentro de handlers evita inflar o bundle inicial.loading no dynamic() melhora UX durante o carregamento assíncrono.webpackIgnore, turbopackIgnore, turbopackOptional) dão controle fino sobre bundling de imports dinâmicos.ssr: false é válido.