Introduction
Dans ce laboratoire, nous allons construire un composant de minuteur à rebours en utilisant React. Le minuteur acceptera des props pour le temps de départ et affichera une représentation visuelle du temps restant. Il inclura également des boutons pour mettre en pause, reprendre et redémarrer le minuteur, et affichera un message lorsque le temps est écoulé. En complétant ce laboratoire, vous acquerrez de l'expérience dans l'utilisation de l'état et des effets en React pour construire des composants dynamiques et interactifs.
Minuteur à rebours
index.htmletscript.jsont déjà été fournis dans la machine virtuelle. En général, vous n'avez qu'à ajouter du code àscript.jsetstyle.css.
Ce code crée un minuteur à rebours qui affiche un message lorsqu'il atteint zéro. Pour le mettre en œuvre, les étapes suivantes sont suivies :
- Utilisez le hook
useState()pour créer une variable d'étattimequi stocke la valeur du temps. Initialisez-la à partir des props et déstructurez-la en ses composants. - Utilisez le hook
useState()pour créer les variables d'étatpausedetover, qui sont utilisées pour empêcher le minuteur de compter si il est en pause ou si le temps est écoulé. - Créez une méthode
tickqui met à jour les valeurs du temps en fonction de la valeur actuelle (c'est-à-dire en diminuant le temps d'une seconde). - Créez une méthode
resetqui remet toutes les variables d'état à leurs états initiaux. - Utilisez le hook
useEffect()pour appeler la méthodeticktoutes les secondes via l'utilisation desetInterval()et utilisezclearInterval()pour nettoyer lorsque le composant est démonté. - Utilisez
String.prototype.padStart()pour ajouter des zéros devant chaque partie du tableau de temps pour créer la représentation visuelle du minuteur.
const CountDown = ({ hours = 0, minutes = 0, seconds = 0 }) => {
const [paused, setPaused] = React.useState(false);
const [over, setOver] = React.useState(false);
const [[h, m, s], setTime] = React.useState([hours, minutes, seconds]);
const tick = () => {
if (paused || over) return;
if (h === 0 && m === 0 && s === 0) setOver(true);
else if (m === 0 && s === 0) setTime([h - 1, 59, 59]);
else if (s == 0) setTime([h, m - 1, 59]);
else setTime([h, m, s - 1]);
};
const reset = () => {
setTime([parseInt(hours), parseInt(minutes), parseInt(seconds)]);
setPaused(false);
setOver(false);
};
React.useEffect(() => {
const timerID = setInterval(tick, 1000);
return () => clearInterval(timerID);
});
return (
<div>
<p>
{`${h.toString().padStart(2, "0")}:${m.toString().padStart(2, "0")}:${s
.toString()
.padStart(2, "0")}`}
</p>
{over && <div>Le temps est écoulé!</div>}
<button onClick={() => setPaused(!paused)}>
{paused ? "Reprendre" : "Pause"}
</button>
<button onClick={reset}>Redémarrer</button>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(
<CountDown hours={1} minutes={45} />
);
Veuillez cliquer sur 'Go Live' dans le coin inférieur droit pour exécuter le service web sur le port 8080. Ensuite, vous pouvez actualiser l'onglet Web 8080 pour prévisualiser la page web.
Sommaire
Félicitations ! Vous avez terminé le laboratoire du minuteur à rebours. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.