Introducción
En este laboratorio, construiremos un componente de temporizador 倒计时器 utilizando React. El temporizador aceptará propiedades para el tiempo de inicio y mostrará una representación visual del tiempo restante. También incluirá botones para pausar, reanudar y reiniciar el temporizador, y mostrará un mensaje cuando se agote el tiempo. Al completar este laboratorio, adquirirá experiencia en el uso de estado y efectos en React para construir componentes dinámicos e interactivos.
Temporizador 倒计时器
En la máquina virtual ya se han proporcionado
index.htmlyscript.js. En general, solo es necesario agregar código ascript.jsystyle.css.
Este código crea un temporizador 倒计时器 que imprime un mensaje cuando llega a cero. Para implementarlo, se siguen los siguientes pasos:
- Utilice el hook
useState()para crear una variable de estadotimeque almacene el valor del tiempo. Inicialícela a partir de las propiedades y desestructúrela en sus componentes. - Utilice el hook
useState()para crear las variables de estadopausedyover, que se utilizan para evitar que el temporizador marque si está en pausa o se agotó el tiempo. - Cree un método
tickque actualice los valores del tiempo en función del valor actual (es decir, disminuyendo el tiempo en un segundo). - Cree un método
resetque restablezca todas las variables de estado a sus estados iniciales. - Utilice el hook
useEffect()para llamar al métodotickcada segundo a través desetInterval()y useclearInterval()para limpiar cuando el componente se desmonta. - Utilice
String.prototype.padStart()para rellenar cada parte del arreglo de tiempo con dos caracteres para crear la representación visual del temporizador.
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>Se acabó el tiempo!</div>}
<button onClick={() => setPaused(!paused)}>
{paused ? "Reanudar" : "Pausar"}
</button>
<button onClick={reset}>Reiniciar</button>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(
<CountDown hours={1} minutes={45} />
);
Haga clic en 'Go Live' en la esquina inferior derecha para ejecutar el servicio web en el puerto 8080. Luego, puede actualizar la pestaña Web 8080 para previsualizar la página web.
Resumen
¡Felicidades! Has completado el laboratorio del Temporizador 倒计时器。Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.