"use client"; import { useEffect, useState } from "react"; import Link from "next/link"; import { getApiUrl } from "../utils/getApiUrl"; // đŸ”„ Import de l'URL dynamique export default function Page() { const [projects, setProjects] = useState([]); // đŸ”„ Stocker les projets une seule fois const apiUrl = getApiUrl(); // đŸ”„ DĂ©finition de l'URL API useEffect(() => { async function fetchProjects() { console.log("🔍 API utilisĂ©e pour les projets :", apiUrl); try { const response = await fetch(`${apiUrl}/api/projects?populate=*`); if (!response.ok) { throw new Error(`Erreur de rĂ©cupĂ©ration des projets : ${response.statusText}`); } const data = await response.json(); setProjects(data.data ?? []); } catch (error) { console.error("❌ Erreur lors de la rĂ©cupĂ©ration des projets :", error); } } fetchProjects(); // đŸ”„ ExĂ©cuter une seule fois au montage du composant }, [apiUrl]); // ✅ ExĂ©cuter `useEffect()` uniquement si `apiUrl` change return (
{/* Titre de la page */}

Portfolio formation 42

{/* Grille améliorée avec une meilleure largeur et des colonnes plus équilibrées */}
{projects.map((project) => { const picture = project.picture?.[0]; const imageUrl = picture?.url ? `${apiUrl}${picture.url}` : "/placeholder.jpg"; return (
{/* Lien vers la page de détail du projet */}
{picture?.name

{project.name}

{project.description}

); })}
); }