前提・実現したいこと
・reactで作成しているtodoリストにおいて、タスクそれぞれで異なるステータス(進行中、完了済みetc)を保持できる様にしたい。
当方勉強不足なのは重々承知なのですが、どうしても解決できなかったため、皆様のお力をお借りできたらと思い質問させていただきます。
何卒、よろしくお願い致します。
問題点/エラー内容/エラー文章
・ステータスの変更と背景色の変更が全てのタスクで共通して行われる。
<=>一つのtodoのみの進捗(useStateで管理しています)を変更することができない。
該当ソースコード/コマンド
incompleteTodos
1 2 3export const IncompleteTodos = (props) =>{ 4const [status,setStatus] = useState([0,1,2,3]); 5 const {incompleteTodos, onClickComplete, onClickDelete} = props; 6const statusValue = (e) =>{ 7 setStatus(e.target.value) 8} 9 10 return( 11 <> 12 <INcompleteBlock> 13 <TItle>todo一覧</TItle> 14 <UL> 15 {incompleteTodos.map((todo,index)=>{ 16 return( 17 <INcompleteList key={index} 18 style={status==="1"? {background:'#FF97C2'} 19 :status==="2"? {background:'#E9FFA5'} 20 :status==="3"? {background:'#78FF94'} 21 :{background:'#EEEEEE'} 22 } 23 > 24 <LIstGuide > 25 <LI>No:{index+1}</LI> 26 <LI>あと{todo.limit}日!</LI> 27 </LIstGuide> 28 <LI>Title:{todo.title}</LI> 29 <LI>内容:{todo.text}</LI> 30 <BUtton onClick={()=>onClickDelete(index)}>削除</BUtton> 31 <BUtton onClick={()=>onClickComplete(index)}>編集</BUtton> 32 <select value={status[index]} onChange={statusValue}> 33 <option selected value="0">選択してください</option> 34 <option value="1">未着手</option> 35 <option value="2">進行中</option> 36 <option value="3">完了済み</option> 37 </select> 38 </INcompleteList> 39); 40 })} 41 </UL> 42 </INcompleteBlock> 43 </> 44 ) 45}; 46const INcompleteBlock = styled.div` 47background-color: #88FFFF; 48width: 80%; 49border-radius: 20px; 50padding-bottom:10px; 51` 52const TItle = styled.p` 53text-align: center; 54font-size: 25px; 55font-weight: bold; 56color: #666; 57` 58 59const UL = styled.ul` 60width:80%; 61` 62const LI = styled.li` 63list-style:none; 64margin: 5px; 65` 66const INcompleteList = styled.div` 67background-color: #EEFFFF; 68 border-radius: 20px; 69 padding: 15px; 70 margin:10px; 71` 72const BUtton = styled.button` 73border-radius: 20px; 74 border: none; 75 margin: 3px 5px 6px 3px; 76 &:hover{ 77 border-radius: 20px; 78 border: none; 79 background-color: blueviolet; 80 color: white; 81} 82 cursor: pointer; 83` 84 85const LIstGuide= styled.div` 86display:flex 87`
処理の流れ
①ドロップダウンリストでステータスの変更を行う。
②useStateのstateに変更が起こるため、レンダリングが起きる。
③pタグ内の三項演算子の記述により、選択したstateによって背景色が変更される。
エラー原因となり得る部分
・map関数内の記述。
→useStateによりステータスの管理を行っているが、一つ一つのtodoにおいてステータスのstateに一意性がないためではないかと考えた。
試したことや調べたこと
-map関数内で一意性を持たせるため、indexの記述をした。
このくらいしか思いつかず、map関数、一意性等検索したのですが、解決には至りませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/22 09:29
2021/06/22 09:35
2021/06/22 09:53
2021/06/22 09:57