Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| web:framework:nextjs [2023/03/22 03:45] – [Recupération de données] jcheron | web:framework:nextjs [2026/04/08 07:25] (Version actuelle) – jcheron | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== NextJS====== | ====== NextJS====== | ||
| + | |||
| NextJS est un Framework FullStack basé sur ReactJS, côté serveur et côté client. | NextJS est un Framework FullStack basé sur ReactJS, côté serveur et côté client. | ||
| + | |||
| + | ===== Sommaire ===== | ||
| + | * [[web: | ||
| + | * [[web: | ||
| + | * [[web: | ||
| + | |||
| ===== Installation ===== | ===== Installation ===== | ||
| [[https:// | [[https:// | ||
| Ligne 18: | Ligne 25: | ||
| <sxh bash; | <sxh bash; | ||
| cd my-next-app | cd my-next-app | ||
| - | npx run dev | + | npm run dev |
| </ | </ | ||
| + | |||
| + | ==== Routage ==== | ||
| + | Avec App router, le routage est basé sur la structure des dossiers à partir de **app**. | ||
| + | |||
| + | * Chaque dossier représente un segment de route | ||
| + | * Les routes se concrétisent et sont accessibles à partir du moment où elles contiennent le fichier **page.jsx/ | ||
| + | |||
| + | < | ||
| + | |||
| + | === Layout === | ||
| + | **app/ | ||
| + | |||
| + | ==== Routes api ==== | ||
| + | Création d'un mock de service backend : | ||
| + | |||
| + | <sxh ts> | ||
| + | // app/ | ||
| + | export async function GET() { | ||
| + | const projets = [ | ||
| + | { id: 1, titre: "Todo App", description: | ||
| + | { id: 2, titre: " | ||
| + | ]; | ||
| + | |||
| + | return Response.json(projets); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Accessible immédiatement sur http:// | ||
| ==== Recupération de données ==== | ==== Recupération de données ==== | ||
| + | |||
| === Côté serveur === | === Côté serveur === | ||
| + | |||
| + | == Page avec SSR == | ||
| + | |||
| + | <WRAP info round> | ||
| + | Sollicité côté serveur à chaque requête. | ||
| + | </ | ||
| + | |||
| + | <sxh ts> | ||
| + | export default async function EventsPage() { | ||
| + | const res = await fetch(" | ||
| + | const events = await res.json() | ||
| + | |||
| + | return ( | ||
| + | <div> | ||
| + | < | ||
| + | {events.map((e: | ||
| + | <div key={e.id}> | ||
| + | ))} | ||
| + | </ | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | == Variables dans l'url == | ||
| + | |||
| + | Structure : | ||
| + | <sxh bash; | ||
| + | app/ | ||
| + | </ | ||
| + | |||
| + | Code : | ||
| + | <sxh ts; | ||
| + | type Props = { | ||
| + | params: { id: string } | ||
| + | } | ||
| + | |||
| + | export default async function EventDetail({ params }: Props) { | ||
| + | const res = await fetch(`http:// | ||
| + | const event = await res.json() | ||
| + | |||
| + | return ( | ||
| + | <div> | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | ) | ||
| + | } | ||
| + | </ | ||
| + | URL : ''/ | ||
| + | |||
| + | == Static Site Generation == | ||
| <sxh javascript> | <sxh javascript> | ||
| Ligne 30: | Ligne 117: | ||
| <> | <> | ||
| <UIList objects={data}/> | <UIList objects={data}/> | ||
| - | </> | + | </ > |
| ) | ) | ||
| } | } | ||