LoginSignup
5
1

More than 1 year has passed since last update.

【コピペで動く】Reactで超簡単にルーレットを作る方法

Posted at

前書き

以前、個人アプリを開発した際にルーレット作ることがあったので今回は次回使う時用のメモとルーレットを作りたい人へのコード共有を兼ねて記事を作成します!

setIntervalを使えばできそうだなぁと思って実装したら副作用のせいでうまくできなかったのを覚えています。。笑

JavaScriptではルーレットを作れるけど、Reactでは副作用のせいでうまくできない。。!

という僕と同じ状況の方がいましたら是非ご覧ください:v:

実装イメージは以下の通りです。

画面収録_2022-04-02_14_11_33_AdobeCreativeCloudExpress (1).gif

注意点

今回のコードはルーレットを動かす記述しか書いてありません。
そのため、実装イメージのようなスタイリングやアニメーションの記述は省かれております。
スタイリングやアニメーションは人によって異なると思いますので適宜お好みであててください。

コード

import {  useState, useEffect, useCallback, memo } from "react";

export const Roulette = memo(() => {
  const [start, setStart] = useState(false);
  const [index, setIndex] = useState(0);

  const rouletteContents = [
    "カレー",
    "パスタ",
    "唐揚げ",
    "天ぷら",
    "中華",
    "ハンバーグ",
    "うどん",
    "肉じゃが"
  ];

  //ボタンの文言を変更する処理
  const startRoulette = useCallback(() => {
    setStart(!start);
  }, [start]);

  //ルーレットを回す処理
  useEffect(() => {
    if (start) {
      const interval = setInterval(() => {
        setIndex((oldIndex) => {
          if (oldIndex < rouletteContents.length - 1) return oldIndex + 1;
          return 0;
        });
      }, 50);//ルーレットの中身を切り替える速度
      return () => clearInterval(interval);
    } else if (!start) {
      return () => clearInterval();
    }
  }, [start]);

  return (
    <>
      <div>
        <p>今日のメニューは・・・</p>
        <p>{rouletteContents[index]}</p>
      </div>
      <button type="button" onClick={startRoulette}>
        {start ? "ストップ" : "スタート"}
      </button>
    </>
  );
});

最後に

参考になりましたでしょうか?

この他にもQiitaTwitterでは文系大学生の僕がプログラミングについて発信してますのでフォローしていただけると嬉しいです!

おすすめ記事

【2022年版】駆け出しフロントエンドエンジニアが覚えたい用語一言メモ集

【React】本番環境にデプロイして画面が真っ白になった時の解決方法

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1