Capítulo 308 de 456
next/dynamic (composição de React.lazy() + Suspense) reduz o bundle JS inicial adiando o carregamento de componentes/libs até serem necessários, funcionando igual no App e Pages Router.
dynamic(() => import(...), { loading }): importa o componente sob demanda; loading define o fallback exibido enquanto carrega.import(...).then((mod) => mod.Nome) pra pegar um export nomeado em vez do default.ssr: false: desativa server-rendering do componente, útil quando ele depende de API de browser (window etc.).await import('fuse.js') fora de dynamic() também funciona, pra libs carregadas só quando o usuário interage.import('path/to/component') precisa ser explícito, literal, nunca template string ou variável, e a chamada import() deve ficar dentro de dynamic() no topo do módulo (não dentro de render).import dynamic from 'next/dynamic'
const DynamicHeader = dynamic(() => import('../components/header'), {
loading: () => <p>Loading...</p>,
})
export default function Home() {
return <DynamicHeader />
}
'use client'
import dynamic from 'next/dynamic'
const DynamicHeader = dynamic(() => import('../components/header'), {
ssr: false,
})
window.onChange={async (e) => {
const { value } = e.currentTarget
const Fuse = (await import('fuse.js')).default
const fuse = new Fuse(names)
setResults(fuse.search(value))
}}
import() do dynamic(): quebra o mapeamento de bundle/module id do webpack; precisa ser string literal.dynamic() dentro de render: precisa ficar no top-level do módulo, igual React.lazy, senão o preload não funciona.next/dynamic é a ferramenta padrão pra code-splitting de componente no Next.js, App e Pages Router.ssr: false resolve dependência de API só de browser.await import(...)) fora de dynamic() serve pra libs carregadas por interação, não componentes React.