Afficher une question
Comment afficher une question dans la page (et pas seulement dans la console) ?

Objectifs
- Comprendre le fonctionnement du JSX dans React.
- Utiliser
useStatepour afficher dynamiquement une question. - Apprendre à afficher une question et ses réponses dans une page Web.
Notions théoriques
1. Qu’est-ce que JSX ?
JSX est une extension de JavaScript qui permet d’écrire du HTML directement dans le code JavaScript. C’est ce que vous utilisez dans un composant React.
Exemple :
return <h1>Bienvenue sur le Quiz Cyber</h1>;
Ici, on retourne un élément HTML (<h1>) dans du JavaScript.
JSX rend le code plus lisible et plus proche de ce qu’on voit à l’écran.
Pourquoi JSX est utile ?
- Il permet de lier facilement les données et l’interface.
- Il rend l’affichage dynamique : le contenu peut changer en fonction de l’état de l’application.
2. Qu’est-ce que useState ?
useState est un hook de React. Il permet de gérer une donnée qui peut changer dans le temps, comme :
- une question actuelle,
- un score,
- une réponse sélectionnée.
Voici comment on l’utilise :
const [compteur, setCompteur] = useState(0);
compteurcontient la valeur actuelle.setCompteurest une fonction qui permet de modifier cette valeur.useState(0)initialise la valeur à 0 (valeur de départ).
3. Afficher dynamiquement une question
On va utiliser useState pour stocker une question et ses réponses, puis les afficher dans la page.
Exemple :
const [question, setQuestion] = useState({
texte: "Qu’est-ce qu’un mot de passe fort ?",
reponses: ["123456", "azerty", "Une phrase longue avec des caractères spéciaux"]
});
Ici, question est un objet avec :
- une propriété
textepour le texte de la question, - une propriété
reponsesqui est un tableau de réponses possibles.
Ensuite, dans le JSX :
<h2>{question.texte}</h2>
<ul>
{question.reponses.map((reponse, index) => (
<li key={index}>{reponse}</li>
))}
</ul>
{question.texte}affiche le texte de la question.- La méthode
.map()permet de parcourir le tableau des réponses et d’afficher chaque réponse dans une liste. key={index}est nécessaire pour que React puisse identifier chaque élément de la liste.
Quelques méthodes à connaître
| Méthode | Description |
|---|---|
useState(valeurInitiale) | Initialise une variable d’état |
setX(nouvelleValeur) | Met à jour la valeur de l’état |
.map() | Permet de transformer un tableau en une liste d’éléments |
{} dans JSX | Permet d’insérer du JavaScript dans du HTML |
key={index} | Permet à React d’identifier chaque élément de la liste |
Test de mémorisation / compréhension
TP pour réfléchir et résoudre des problèmes
Contexte
Vous avez déjà une fonction fetchQuestion() dans le fichier app/page.tsx qui récupère une question depuis Supabase :
"use client"
import { useEffect } from 'react';
import { supabase } from '../lib/supabaseClient';
export default function Home() {
useEffect(() => {
async function fetchQuestion() {
const { data, error } = await supabase
.from('question')
.select('*')
.limit(1);
if (error) console.error(error);
else console.log(data);
}
fetchQuestion();
}, []);
return <h1>Bienvenue sur CyberQuiz</h1>;
}
Objectif
On va maintenant afficher la question du Quiz, dans la page au lieu de l’afficher dans la console.
Étape 1 : Créer une nouvelle branche Git
git checkout -b affichage-question