Reactでチェックボックスがチェックされたかどうかの結果を
ローカルストレージに保存する機能を以下のように作りました。
React
1import './App.css'; 2import { useState, useEffect } from 'react'; 3 4//チェックボックスの初期値を設定 5const App = () => { 6 const [currentCheckboxId, setCheckboxId] = useState({ 7 check1: false, 8 check2: false, 9 }); 10 11//ローカルストレージに保存されている1つ目と2つ目のチェックボックスの結果を取得 12 useEffect(() => { 13 const data = { 14 check1: localStorage.getItem('check1') === 'true' ? true : false, 15 check2: localStorage.getItem('check2') === 'true' ? true : false, 16 }; 17 setCheckboxId(data); 18 }, []); 19 20//1つ目のチェックボックスの結果をローカルストレージに保存 21 const setCheckbox = (event) => { 22 const check1 = event.target.checked; 23 localStorage.setItem('check1', check1); 24 25 setCheckboxId((prevData) => ({ 26 ...prevData, 27 check1: check1, 28 })); 29 }; 30 31//2つ目のチェックボックスの結果をローカルストレージに保存 32 const setCheckbox2 = (event) => { 33 const check2 = event.target.checked; 34 localStorage.setItem('check2', check2); 35 36 setCheckboxId((prevData) => ({ 37 ...prevData, 38 check2: check2, 39 })); 40 }; 41 42//ローカルストレージの内容削除 43 const removeCheckbox = (event) => { 44 const check1 = event.target.checked; 45 const check2 = event.target.checked; 46 localStorage.clear(); 47 setCheckboxId((prevData) => ({ 48 ...prevData, 49 check1: check1, 50 })); 51 setCheckboxId((prevData) => ({ 52 ...prevData, 53 check2: check2, 54 })); 55 }; 56 57 return ( 58 <div className='App'> 59 <h1>リロードしても消えないチェックボックス</h1> 60 <label> 61 チェックボックス1 62 <input type='checkbox' onChange={setCheckbox} id='first' checked={currentCheckboxId.check1} /> 63 </label> 64 65 <label> 66 チェックボックス2 67 <input type='checkbox' onChange={setCheckbox2} id='second' checked={currentCheckboxId.check2} /> 68 </label> 69 <br /> 70 <button onClick={removeCheckbox}>チェックを全て外す</button> 71 </div> 72 ); 73}; 74 75export default App;
コードではチェックボックスが2個ですが
本来は70個チェックボックスを作りたいです。
この場合愚直に3.4.5と変数の数字だけ変えて70回書くしか方法はないのでしょうか?
今後のことも考えてもメンテナンス性の良いコードにしたいと
考えているのですがどの様にまとめれば良いか思いつきません。
是非アドバイス等よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー