onChangeに直接書いたりreturnの中でmapを使ってループさせる書き方など試してみましたがうまくいきません。
React
1import React, { useEffect, useState, useContext } from "react"; 2import { useHistory } from 'react-router-dom'; 3import { storage, db } from "../firebase.js"; 4 5const SelectBan = () => { 6 7 const [rulFlg, setRulFlg] = useState({}); 8 const [rul, setRul] = useState([]); 9 10 useEffect(() => { 11 const docRef = db.collection("terBn").orderBy("index"); 12 docRef.get().then((querySnapshot) => { 13 querySnapshot.forEach((doc) => { 14 let data = doc.data(); 15 rulFlg[doc.id] = data.default; 16 17 setRules(oldForm => [...oldForm, 18 <label className="bnLabel" htmlFor={doc.id} key={doc.id}> 19 <input 20 id={doc.id} 21 type="checkbox" 22 name="bnRules" 23 checked={rulFlg[doc.id]} 24 onChange={handleChange} 25 value={doc.id} 26 /> 27 {data.rule} 28 </label> 29 ]); 30 setRulesFlg(Object.assign({}, rulFlg)) 31 }); 32 }).catch(function(error) { 33 console.log("Error getting document:", error); 34 }); 35 }, []) 36 37 const handleChange = (e) => { 38 // rulFlg[e.target.value]の値はしっかり取れてます 39 rulFlg[e.target.value] = !rulFlg[e.target.value] 40 setRulFlg(Object.assign({}, rulFlg)) 41 } 42 43 const handleSubmit = () => { 44 } 45 46 return ( 47 <div className="selectBan"> 48 <div className="formTitle">アイテムの選択</div> 49 <div className="formCheckbox"> 50 {rul} 51 </div> 52 <button onClick={handleSubmit}>完了</button> 53 </div> 54 ); 55} 56 57export default SelectBan; 58
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。