はじめに
この実験では、React を使ってカウントダウンタイマーコンポーネントを作成します。タイマーは開始時刻のための props を受け取り、残り時間の視覚的表現をレンダリングします。また、タイマーを一時停止、再開、再起動するためのボタンも含み、時間切れになったときにメッセージを表示します。この実験を完了することで、React で状態とエフェクトを使って動的で対話型のコンポーネントを構築する経験を得ることができます。
カウントダウンタイマー
VM 内には既に
index.htmlとscript.jsが用意されています。一般的には、script.jsとstyle.cssにのみコードを追加すればよいです。
このコードは、ゼロに達したときにメッセージを表示するカウントダウンタイマーを作成します。それを実装するには、以下の手順を踏みます。
useState()フックを使って、時間値を保持する状態変数timeを作成します。props から初期化し、それをコンポーネントに分解します。useState()フックを使って、タイマーが一時停止している場合や時間が切れている場合にタイマーがカウントダウンしないようにするためのpausedとoverの状態変数を作成します。- 現在の値に基づいて時間値を更新する(つまり、1 秒ごとに時間を減らす)
tickメソッドを作成します。 - すべての状態変数を初期状態にリセットする
resetメソッドを作成します。 useEffect()フックを使って、setInterval()を使って毎秒tickメソッドを呼び出し、コンポーネントがアンマウントされたときにクリーンアップするためにclearInterval()を使います。String.prototype.padStart()を使って、時間配列の各部分を 2 桁に埋めてタイマーの視覚的表現を作成します。
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} />
);
右下隅の「Go Live」をクリックして、ポート 8080 でウェブサービスを実行してください。その後、Web 8080タブを更新してウェブページをプレビューできます。
まとめ
おめでとうございます!あなたはカウントダウンタイマーの実験を完了しました。あなたの技術を向上させるために、LabEx でさらに多くの実験を練習することができます。