Composants asynchrones
Fait partie de la section L'essentiel de Next.js du Journey React de Coddy — leçon 23 sur 47.
Voici la récompense pour tout ce qui a été mis en place dans le chapitre précédent. Un composant serveur peut être async :
import { getDishes } from '../lib/data';
export default async function Page() {
const dishes = await getDishes();
return <h1>{dishes.length} dishes</h1>;
}Relisez cela, car c'est vraiment nouveau. Le composant attend. Next.js l'exécute sur le serveur, laisse le await se terminer, et ensuite seulement transforme le résultat en HTML.
Comparez-le à la version 100% navigateur que vous écririez autrement :
- La page s'affiche d'abord vide
- Une requête est envoyée après le chargement de la page
- Un état bascule, et le contenu apparaît, un clignotement que l'utilisateur voit à chaque fois
Avec un composant serveur async, il n'y a pas de premier rendu vide. Il n'y a rien à clignoter, car les données étaient déjà là lorsque l'HTML a été généré. Pas de useEffect, pas de fanion de chargement, pas de seconde requête.
Deux règles rendent cela légal :
- Seuls les composants server peuvent être
async: un composant marqué'use client'ne le peut pas - Les données doivent provenir d'un endroit auquel le serveur peut accéder : une base de données, un fichier ou un module comme
lib/data.js
Défi
Facilelib/data.js est fourni et verrouillé. Il me permet d'exporter getDishes(), qui renvoie une promesse pour un tableau d'objets { id, name }.
- Faites de
Pagedansapp/page.jsxune fonctionasync. - Utilisez
await getDishes()dans une variabledishes. - À l'intérieur de
<ul id="dish-list">, affichez un<li>par plat, aveckey={dish.id},id={dish.id}et lenamedu plat comme texte.
Pas de useEffect, pas de fanion de chargement, seulement await.
Essayez vous-même
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de L'essentiel de Next.js
1Pourquoi Next.js
Ce que Next.js apporteLe dossier AppVotre première pageRécapitulatif : Pourquoi Next.js2Routage et liens
Les dossiers sont des routesRoutes imbriquéesLier des pagesRoutes dynamiquesPages non trouvéesRécapitulatif : Routage5Données sur le serveur
Composants asynchronesAttendre les paramètres de routeDeux requêtes simultanéesÉtats de chargementGestion des erreursRécapitulatif : Récupération de données