Introdução
Neste laboratório, construiremos um componente de temporizador de contagem regressiva usando React. O temporizador aceitará props para o tempo inicial e renderizará uma representação visual do tempo restante. Ele também incluirá botões para pausar, retomar e reiniciar o temporizador, e exibirá uma mensagem quando o tempo acabar. Ao concluir este laboratório, você ganhará experiência usando state e effects em React para construir componentes dinâmicos e interativos.
Temporizador de Contagem Regressiva
index.htmlescript.jsjá foram fornecidos na VM. Em geral, você só precisa adicionar código ascript.jsestyle.css.
Este código cria um temporizador de contagem regressiva que imprime uma mensagem quando atinge zero. Para implementá-lo, as seguintes etapas são tomadas:
- Use o hook
useState()para criar uma variável de estadotimeque armazena o valor do tempo. Inicialize-a a partir das props e desestruture-a em seus componentes. - Use o hook
useState()para criar as variáveis de estadopausedeover, que são usadas para impedir que o temporizador avance se estiver pausado ou se o tempo tiver acabado. - Crie um método
tickque atualiza os valores do tempo com base no valor atual (ou seja, diminuindo o tempo em um segundo). - Crie um método
resetque redefine todas as variáveis de estado para seus estados iniciais. - Use o hook
useEffect()para chamar o métodoticka cada segundo por meio do uso desetInterval()e useclearInterval()para limpar quando o componente for desmontado. - Use
String.prototype.padStart()para preencher cada parte do array de tempo com dois caracteres para criar a representação visual do 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>Time's up!</div>}
<button onClick={() => setPaused(!paused)}>
{paused ? "Resume" : "Pause"}
</button>
<button onClick={reset}>Restart</button>
</div>
);
};
ReactDOM.createRoot(document.getElementById("root")).render(
<CountDown hours={1} minutes={45} />
);
Por favor, clique em 'Go Live' no canto inferior direito para executar o serviço web na porta 8080. Em seguida, você pode atualizar a aba Web 8080 para visualizar a página web.
Resumo
Parabéns! Você concluiu o laboratório do Temporizador de Contagem Regressiva. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.