NextJS
NextJS est un Framework FullStack basé sur ReactJS, côté serveur et côté client.
Sommaire
Installation
NodeJS requis
Création projet
Création du projet :
npx create-next-app@latest
Eventuellement avec le support typeScript :
npx create-next-app@latest --ts
Démarrage du serveur
cd my-next-app 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/tsx
Layout
app/layout.jsx correspond au main layout, et permet de définir la structure de base des pages.
Routes api
Création d'un mock de service backend :
// app/api/projets/route.js
export async function GET() {
const projets = [
{ id: 1, titre: "Todo App", description: "Gérer ses tâches", techno: "React" },
{ id: 2, titre: "Blog", description: "Écrire des articles", techno: "Next.js" },
];
return Response.json(projets);
}
Accessible immédiatement sur http://localhost:3000/api/projets
Recupération de données
Côté serveur
Page avec SSR
Sollicité côté serveur à chaque requête.
export default async function EventsPage() {
const res = await fetch("http://localhost:8080/events")
const events = await res.json()
return (
<div>
<h1>Liste des événements</h1>
{events.map((e: any) => (
<div key={e.id}>{e.name}</div>
))}
</div>
)
}
Variables dans l'url
Structure :
app/events/[id]/page.tsx
Code :
type Props = {
params: { id: string }
}
export default async function EventDetail({ params }: Props) {
const res = await fetch(`http://localhost:8080/events/${params.id}`)
const event = await res.json()
return (
<div>
<h1>{event.name}</h1>
<p>{event.description}</p>
</div>
)
}
URL : /events/42
Static Site Generation
export default function Home({data}) {
return (
<>
<UIList objects={data}/>
</ >
)
}
export async function getStaticProps() {
const res = await fetch(API_URL)
const data = await res.json()
return {
props: {
data
}
}
}
