Componentes Assíncronos
Parte da seção Essenciais do Next.js do Journey de React da Coddy — lição 23 de 47.
Aqui está a recompensa por tudo o que o último capítulo preparou. Um componente do servidor pode ser async:
import { getDishes } from '../lib/data';
export default async function Page() {
const dishes = await getDishes();
return <h1>{dishes.length} dishes</h1>;
}Leia isso novamente, porque é genuinamente novo. O componente espera. O Next.js o executa no servidor, deixa o await terminar e só então transforma o resultado em HTML.
Compare com a versão exclusiva para o navegador que você escreveria de outra forma:
- A página é renderizada vazia primeiro
- Uma requisição é enviada após a página ter carregado
- Algum estado muda e o conteúdo aparece, um flicker que o usuário vê todas as vezes
Com um Server Component assíncrono, não há uma primeira renderização vazia. Não há nada para piscar, porque os dados já estavam lá quando o HTML foi construído. Sem useEffect, sem sinalizador de carregamento, sem segunda requisição.
Duas regras tornam isso legal:
- Apenas componentes do server podem ser
async: um componente marcado com'use client'não pode - Os dados precisam vir de algum lugar que o servidor consiga alcançar: um banco de dados, um arquivo ou um módulo como
lib/data.js
Desafio
FácilO arquivo lib/data.js é fornecido e está bloqueado. Ele exporta getDishes(), que retorna uma promise para uma array de objetos { id, name }.
- Torne
Pageemapp/page.jsxuma funçãoasync. - Faça
await getDishes()em uma variáveldishes. - Dentro de
<ul id="dish-list">, renderize um<li>por prato, comkey={dish.id},id={dish.id}e onamedo prato como seu texto.
Sem useEffect, sem flag de carregamento, apenas await.
Experimente você mesmo
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Essenciais do Next.js
1Por que usar o Next.js
O que o Next.js adicionaA pasta AppSua primeira páginaRecapitulação: Por que usar o Next.js2Roteamento e Links
Pastas São RotasRotas AninhadasVinculando PáginasRotas DinâmicasPáginas Não EncontradasRecapitulação: Roteamento5Dados no Servidor
Componentes AssíncronosAguardando Parâmetros de RotaDuas Buscas ao Mesmo TempoEstados de CarregamentoTratamento de ErrosRecapitulando: Busca de Dados