やりたいこと
ビンゴゲームを作成しています。
ボタンを押すと、1〜9のいずれかの数字を選択し、そこで選択された数字がビンゴシート上で色が変わるようにしたいです。
※通常のビンゴに必要な諸々の機能はまだ実装していません。
解決したい問題
ボタンを押して選択された数字「selectedNum」と、ビンゴシートにある9マスのうちの、いずれかの「sheetNum」が一致する場合、そのマスのDOM要素を取得し、選択されたことがわかりやすいよう背景色をつけるためのクラスを付与したいのですが、特定の条件にあうDOM要素の取得方法、クラスの付与方法が思いつきません。アドバイスをお願いいたします。
javascript
1import { useEffect, useState } from 'react' 2import styled from 'styled-components' 3 4function App() { 5 const [drawedNum, setDrawedNum] = useState(' ') 6 const [sheetNums, setSheetNums] = useState([1,2,3,4,5,6,7,8,9]) 7 8 const shuffle = ([...array]) => { 9 for (let i = array.length - 1; i >= 0; i--) { 10 const j = Math.floor(Math.random() * (i + 1)); 11 [array[i], array[j]] = [array[j], array[i]]; 12 } 13 return array; 14 } 15 16 // ビンゴシート作成 17 // 1〜9の組み合わせて、マウントのたびに異なるシートを作成 18 useEffect ( () => { 19 setSheetNums(shuffle(sheetNums)) 20 }, []) 21 22// くじ引き 23// 1~9いずれかの数字をランダムで引く。 24 var selectedNum; 25 function selectNum () { 26 const array = [1,2,3,4,5,6,7,8,9] 27 selectedNum = array[Math.floor(Math.random() * 9)] 28 setDrawedNum(selectedNum) 29 } 30 31 console.log(drawedNum) 32 33 return ( 34 <> 35 <Field> 36 { 37 sheetNums.map((sheetNum, index) => { 38 return <div key={index}>{sheetNum}</div> 39 }) 40 } 41 </Field> 42 <SelectedNum>選ばれた番号は{drawedNum}です</SelectedNum> 43 <button onClick={selectNum}>くじ引きボタン</button> 44 </> 45 ); 46} 47 48export default App; 49 50const Field = styled.div` 51 box-sizing: border-box; 52 height: 270px; 53 width: 270px; 54 display: flex; 55 flex-wrap: wrap; 56 margin-bottom: 20px; 57 div { 58 box-sizing: border-box; 59 border: 1px solid black; 60 height: 90px; 61 width: 90px; 62 line-height: 90px; 63 text-align: center; 64 font-size: 25px; 65 } 66` 67const SelectedNum = styled.div` 68 width: 240px; 69 height: 100px; 70 border: solid 1px black; 71 line-height: 100px; 72 text-align: center; 73`
回答1件
あなたの回答
tips
プレビュー