Préparation d'entretien 100% Gratuit angularforall.com

Entretien Next.js Débutant : pages, routing et SSR

Next-Js Debutant Quiz-Nextjs-Debutant App-Router Server-Components Ssr Ssg Nextjs-Pages Nextjs-Layouts Questions-Entretien-Nextjs Qcm-Nextjs Apprendre-Nextjs React Front-End
Débutant 🔀 Mixte 20 questions ⏱ 15 min
📝

Entretien Next.js Débutant : pages, routing et SSR

20 questions sur les bases de Next.js : App Router, pages, layouts, server components, fetching de données et SSR/SSG. Idéal pour un premier entretien Next.js.

20 questions ⏱ ~15 min Niveau Débutant

Partager

Banque de révision : les 30 questions corrigées

Voici l'intégralité des 30 questions de « Entretien Next.js Débutant : pages, routing et SSR », chacune avec sa bonne réponse et son explication. Le quiz interactif ci-dessus en tire une sélection aléatoire à chaque tentative — utilisez cette liste complète pour réviser.

  • Un framework React créé par Vercel pour le rendu côté serveur, la génération statique et le routage simplifié (bonne réponse)
  • Une bibliothèque de composants UI pour React
  • Un gestionnaire d'état global comme Redux
  • Un langage de programmation qui compile en JavaScript
Explication : Next.js est un framework React développé par Vercel. Il étend React en ajoutant le rendu côté serveur (SSR), la génération de sites statiques (SSG), le routage basé sur les fichiers, et de nombreuses optimisations automatiques.
Next.js est le framework React le plus populaire en 2024. Il permet de créer des applications web complètes, du frontend au backend.

  • npx create-next-app@latest (bonne réponse)
  • npm create react-app
  • npx next new
  • npm init next-project
Explication : La commande officielle est npx create-next-app@latest mon-projet. Pendant l'installation, on vous propose de configurer TypeScript, ESLint, Tailwind CSS, le dossier src/ et l'App Router.
Ajoutez --typescript pour activer TypeScript, --tailwind pour Tailwind CSS, --eslint pour ESLint automatiquement.

  • Le dossier app/ (bonne réponse)
  • Le dossier pages/
  • Le dossier routes/
  • Le dossier components/
Explication : Dans l'App Router (Next.js 13+), les routes sont définies dans le dossier app/. Chaque sous-dossier avec un fichier page.js devient une route. Le dossier pages/ est l'ancienne approche (Pages Router).
app/page.js correspond à la route /. app/blog/page.js correspond à la route /blog.

  • Un fichier spécial qui exporte un composant React et définit une route accessible dans l'application (bonne réponse)
  • Un fichier de configuration pour le style de la page
  • Un fichier qui contient uniquement des fonctions utilitaires
  • Un fichier qui définit la base de données de la page
Explication : Le fichier page.js (ou page.tsx) est un fichier spécial qui exporte par défaut un composant React. Ce composant devient la page accessible à la route correspondante.
Chaque dossier de route doit contenir un page.js pour être accessible publiquement.

  • Définir une interface utilisateur partagée qui persiste entre les navigations et enveloppe les pages enfants (bonne réponse)
  • Définir la mise en page CSS uniquement
  • Stocker les données de l'application
  • Configurer le déploiement de l'application
Explication : Le fichier layout.js définit un composant qui enveloppe les pages enfants. Il persiste entre les navigations (ne se re-rend pas), ce qui améliore les performances. Le layout racine dans app/layout.js est obligatoire.
Le layout racine doit contenir les balises <html> et <body>.

  • En créant le fichier app/a-propos/page.js (bonne réponse)
  • En créant le fichier pages/a-propos.js
  • En ajoutant une route dans next.config.js
  • En créant le composant dans app/page.js
Explication : Dans l'App Router, on crée un dossier a-propos dans app/ avec un fichier page.js à l'intérieur. Le nom du dossier devient le segment de route.
Le fichier doit exporter par défaut un composant React : export default function APropos() { return <h1>À propos</h1>; }.

  • Un composant exécuté uniquement côté serveur, qui peut accéder aux bases de données sans exposer de code au client (bonne réponse)
  • Un composant qui ne fonctionne que sur les serveurs Windows
  • Un composant pour gérer les requêtes HTTP
  • Un composant qui remplace les API routes
Explication : Dans l'App Router, tous les composants sont des Server Components par défaut. Ils s'exécutent sur le serveur, peuvent accéder directement aux bases de données, et ne sont jamais envoyés au navigateur (pas de JavaScript client).
Les Server Components ne peuvent pas utiliser useState, useEffect ou onClick. Pour cela, il faut un Client Component.

  • Utiliser le composant importé depuis "next/link" (bonne réponse)
  • Utiliser des balises HTML classiques uniquement
  • Utiliser window.location.href systématiquement
  • Next.js ne supporte pas la navigation entre pages
Explication : Le composant <Link href="/route"> de next/link permet la navigation côté client sans rechargement complet. Il précharge automatiquement les pages pour une navigation plus rapide.
<Link href="/blog">Blog</Link>. Pour les liens externes, utilisez une balise <a> classique.

  • Optimiser automatiquement les images : redimensionnement, lazy loading, formats modernes (WebP/AVIF) (bonne réponse)
  • Créer des galeries d'images
  • Appliquer des filtres CSS aux images
  • Héberger des images sur un serveur externe
Explication : Le composant <Image> de next/image optimise automatiquement les images locales et distantes. Il gère le lazy loading, le redimensionnement, la conversion en formats modernes, et évite le CLS (Cumulative Layout Shift).
Pour les images externes, configurez les domaines autorisés dans next.config.js avec images.remotePatterns.

  • loading.js (bonne réponse)
  • spinner.js
  • wait.js
  • suspense.js
Explication : Le fichier loading.js est un fichier spécial qui s'affiche automatiquement pendant le chargement du contenu de la page. Il crée un Suspense automatique autour de la page.
Placez loading.js dans le même dossier que page.js pour un indicateur de chargement spécifique à cette route.

  • Les Server Components s'exécutent côté serveur sans JavaScript client ; les Client Components ajoutent l'interactivité dans le navigateur (bonne réponse)
  • Les Server Components sont plus lents
  • Les Client Components ne peuvent pas afficher de HTML
  • Il n'y a pas de différence, ce sont deux noms pour la même chose
Explication : Par défaut, les composants sont des Server Components (exécutés sur le serveur, pas de JS client). Pour ajouter de l'interactivité (hooks, événements), on ajoute "use client" en haut du fichier pour en faire un Client Component.
Un Client Component peut importer des Server Components, mais l'inverse n'est pas possible.

  • Ajouter "use client" en haut du fichier (bonne réponse)
  • Nommer le fichier avec .client.js
  • Utiliser le hook useClient()
  • Importer le composant depuis "next/client"
Explication : Pour transformer un composant en Client Component, on ajoute la directive "use client" tout en haut du fichier. Cela permet d'utiliser des hooks, des gestionnaires d'événements, et d'autres fonctionnalités interactives.
La directive "use client" doit être la première ligne du fichier, avant tout import.

  • Directement dans un Server Component avec async/await et fetch() (bonne réponse)
  • Uniquement avec useEffect dans un Client Component
  • Avec une bibliothèque externe obligatoire
  • Next.js ne permet pas de fetch des données
Explication : Dans l'App Router, les Server Components peuvent être asynchrones. On peut utiliser async/await directement avec fetch() pour récupérer des données et les afficher.
Exemple : export default async function Page() { const data = await fetch("https://api.example.com"); const json = await data.json(); return <div>{json.title}</div>; }.

  • Une route qui utilise des paramètres variables, définie avec des crochets comme [id] ou [slug] (bonne réponse)
  • Une route qui change aléatoirement
  • Une route qui nécessite une connexion Internet
  • Une route protégée par mot de passe
Explication : Les routes dynamiques utilisent des noms de dossiers entre crochets : app/blog/[slug]/page.js correspond à /blog/mon-article. Le paramètre slug est passé automatiquement au composant via params.
Pour des segments optionnels, utilisez [[...param]] (catch-all optionnel).

  • Un fichier spécial qui affiche une page 404 personnalisée quand une route n'existe pas (bonne réponse)
  • Un fichier pour logger les erreurs 404
  • Un fichier qui liste toutes les pages non trouvées
  • Un fichier de configuration pour le serveur
Explication : Le fichier not-found.js permet de créer une page 404 personnalisée. Dans l'App Router, il peut être placé dans n'importe quel segment pour une page 404 spécifique à cette section.
Pour déclencher manuellement la page 404 depuis un composant, utilisez la fonction notFound() importée depuis next/navigation.

  • npm run dev (bonne réponse)
  • npm start
  • npm run serve
  • next start
Explication : La commande npm run dev lance le serveur de développement avec hot reload. Par défaut, l'application est accessible sur http://localhost:3000.
Utilisez npm run build pour créer la version de production, puis npm start pour la servir.

  • Afficher une interface d'erreur personnalisée quand une erreur se produit dans une page (bonne réponse)
  • Stocker les logs d'erreur du serveur
  • Configurer les messages d'erreur HTTP
  • Désactiver les erreurs dans l'application
Explication : Le fichier error.js crée une boundary d'erreur (Error Boundary) pour gérer les erreurs dans les pages enfants. Il doit être un Client Component ("use client") et reçoit error et reset comme props.
error.js ne capture pas les erreurs dans le layout parent. Pour cela, créez un error.js dans le dossier du layout.

  • usePathname() de next/navigation combiné avec (bonne réponse)
  • Le composant de Next.js
  • L'attribut active sur
  • Next.js ne gère pas les liens actifs
Explication : Next.js n'a pas de composant intégré pour les liens actifs. On utilise usePathname() de next/navigation pour obtenir le chemin courant et le comparer avec le href du lien.
Pattern courant : const pathname = usePathname(); puis className={pathname === "/blog" ? "active" : ""}.

  • Avec la fonction next/font/google qui optimise et auto-héberge les polices (bonne réponse)
  • En ajoutant un lien CDN dans le HTML
  • En téléchargeant manuellement les fichiers de police
  • Next.js ne supporte pas Google Fonts
Explication : next/font/google permet d'importer des polices Google Fonts de manière optimisée. La police est auto-hébergée (pas de requête externe) et optimisée pour éliminer le flash de texte invisible (FOUT).
Exemple : import { Inter } from "next/font/google"; const inter = Inter({ subsets: ["latin"] });.

  • Importer le fichier CSS dans app/layout.js (bonne réponse)
  • Ajouter une balise dans chaque page
  • Utiliser uniquement CSS-in-JS
  • Les styles globaux ne sont pas supportés
Explication : Les styles globaux s'importent dans le layout racine app/layout.js : import "./globals.css". Les fichiers CSS importés ailleurs doivent être des modules CSS (fichier.module.css).
Les modules CSS s'importent ainsi : import styles from "./page.module.css" et s'utilisent avec className={styles.maClasse}.

  • Le fichier de configuration principal de Next.js pour personnaliser le comportement du framework (bonne réponse)
  • Un fichier de configuration de base de données
  • Un fichier de routes personnalisées
  • Un fichier obligatoire pour les composants serveur
Explication : next.config.js est le fichier de configuration où l'on peut personnaliser Next.js : configurer les images externes, les redirections, les rewrites, les variables d'environnement, les en-têtes HTTP, etc.
Exemple de configuration d'images : module.exports = { images: { remotePatterns: [{ hostname: "example.com" }] } }.

  • Avec process.env.MA_VARIABLE, préfixée par NEXT_PUBLIC_ si elle doit être accessible côté client (bonne réponse)
  • Dans un fichier .env inaccessible au code
  • En les passant manuellement à chaque composant
  • Next.js ne supporte pas les variables d'environnement
Explication : Dans Next.js, les variables dans .env.local sont accessibles via process.env.MA_VARIABLE. Pour qu'une variable soit accessible côté client (navigateur), elle doit être préfixée par NEXT_PUBLIC_.
Ne mettez jamais de secrets (clés API, tokens) dans des variables NEXT_PUBLIC_. Elles seraient visibles dans le bundle client.

  • Charger des scripts JavaScript externes de manière optimisée avec stratégies de chargement (bonne réponse)
  • Exécuter du JavaScript côté serveur uniquement
  • Remplacer les balises HTML
  • Compiler le JavaScript en WebAssembly
Explication : Le composant <Script> de next/script permet de charger des scripts tiers avec différentes stratégies : beforeInteractive, afterInteractive, lazyOnload. Cela optimise le chargement et les performances.
Pour les scripts analytics (Google Analytics, etc.), utilisez la stratégie lazyOnload pour ne pas bloquer le rendu initial.

  • Créer un fichier app/api/route.js exportant une fonction GET qui retourne Response.json() (bonne réponse)
  • Créer un fichier server.js dans le dossier racine
  • Ajouter une fonction dans next.config.js
  • Next.js ne permet pas de créer des API
Explication : Dans l'App Router, on crée app/api/mon-endpoint/route.js qui exporte des fonctions GET, POST, etc. Chaque fonction doit retourner une réponse avec Response.json().
Exemple simple : export async function GET() { return Response.json({ message: "Hello" }); }.

  • npm run dev lance le serveur de développement ; npm run build génère la version optimisée de production (bonne réponse)
  • npm run dev est pour Windows ; npm run build pour Mac
  • Il n'y a pas de différence
  • npm run dev est plus rapide pour la production
Explication : npm run dev lance le serveur de développement avec hot reload pour coder. npm run build compile l'application pour la production (optimisations, minification). Ensuite npm start sert la version de production.
Utilisez npm run dev pendant le développement, et npm run build && npm start pour tester la version de production localement.

  • Importer l'image et l'utiliser dans le composant avec la propriété src
  • Mettre l'image dans le dossier public et utiliser le chemin absolu
  • Les deux méthodes sont valides (bonne réponse)
  • Héberger l'image obligatoirement sur un CDN externe
Explication : On peut soit importer l'image : import logo from "./logo.png" puis <Image src={logo} />, soit la placer dans public/ et utiliser <Image src="/logo.png" />. L'import direct donne des informations de dimensions automatiquement.
Avec l'import direct, Next.js connaît la largeur et la hauteur, ce qui évite le CLS (Cumulative Layout Shift).

  • Chaque dossier dans app/ qui correspond à une partie du chemin de l'URL (bonne réponse)
  • Un morceau de code JavaScript
  • Une partie d'un composant React
  • Un fichier de configuration
Explication : Chaque dossier dans app/ représente un segment de route. Par exemple, app/dashboard/settings/ correspond aux segments dashboard et settings, créant la route /dashboard/settings.
Un segment peut être statique (nom de dossier fixe), dynamique ([id]), ou catch-all ([...slug]).

  • Exporter un objet metadata ou une fonction generateMetadata depuis page.js (bonne réponse)
  • Modifier le fichier index.html directement
  • Utiliser document.title dans un useEffect
  • Configurer le titre dans next.config.js
Explication : Dans l'App Router, on exporte un objet metadata ou une fonction generateMetadata. Exemple : export const metadata = { title: "Ma Page" }. Cela définit automatiquement la balise <title>.
Le metadata peut aussi inclure description, openGraph, keywords pour un SEO complet.

  • Un framework CSS utilitaire ; Next.js le propose comme option lors de la création du projet (bonne réponse)
  • Un langage de programmation pour le style
  • Une bibliothèque de composants Next.js
  • Un outil de build CSS incompatible avec Next.js
Explication : Tailwind CSS est un framework CSS utilitaire (classes comme flex, text-center, bg-blue-500). Next.js l'intègre nativement et le propose comme option lors de create-next-app.
Lors de npx create-next-app@latest, répondez "Yes" à "Would you like to use Tailwind CSS?" pour l'activer automatiquement.

  • Dans le dossier public/ à la racine du projet (bonne réponse)
  • Dans le dossier app/static/
  • Dans un dossier assets/ dans src/
  • Sur un serveur externe obligatoirement
Explication : Le dossier public/ à la racine du projet contient les fichiers statiques. Tout fichier dans ce dossier est servi à la racine du site : public/image.png est accessible via /image.png.
Placez-y les fichiers comme robots.txt, favicon.ico, sitemap.xml, et les images statiques non importées.