前提・実現したいこと
Reactで動画を複数個登録できる動的フォームを作成しております。
動画にチェックボックスを用意しているのですがstateを更新しても、再描画がされません。
チェックボックスを押下後、再度同じチェックボックスを押下すると反映されるのですが、原因を教えていただきたいです。
stateは新しいインスタンスを作成し、反映されないとのことで下記を参考にしてみたのですが解決しませんでした。
https://teratail.com/questions/305000
該当のソースコード
React.js
1export const VideoRelationForm = (prop) => { 2 const initialVideoState = { 3 'video': '', 4 'valid_flg': false, 5 } 6 const [title, setTitle] = useState(""); 7 const [video, setVideo] = useState([initialVideoState]); 8 9 const handleSubmit = (e) => { 10 e.preventDefault(); 11 12 const formData = new FormData(); 13 formData.append('title', title); 14 video.map(v => { 15 formData.append('video', v.video, v.video.name); 16 formData.append('valid_flg', v.valid_flg); 17 }); 18 19 // API通信 20 } 21 22 const AddForm = (e) => { 23 e.preventDefault(); 24 setVideo([...video, initialVideoState]); 25 } 26 27 const handleChange = (hogehoge, e) => { 28 e.preventDefault(); 29 var newVideo = [...video]; 30 newVideo.find(v => v===hogehoge).valid_flg= e.target.checked; 31 setVideo(newVideo); 32 } 33 34 return( 35 <label> 36 タイトル: 37 <input type="text" name="title" value={ title } onChange={ (e) => setTitle(e.target.value) } /> 38 </label> 39 {video.map(v => 40 <> 41 <label> 42 動画: 43 <input type="file" name="video" accept='video/*' alt="動画" /> 44 </label> 45 <label> 46 動画タイプ: 47 <input type="checkbox" name="valid_flg" onChange={ (e) => handleChange(v, e) } checked={v.valid_flg} /> 48 </label> 49 </> 50 )} 51 ) 52}
試したこと
結果変わらず
const handleChange = (hogehoge, e) => { e.preventDefault(); var newVideo = []; video.map( v => { if(v===hogehoge){ v.valid_flg = e.target.checked; } newVideo.push(v); }); setVideo(newVideo); }
回答2件
あなたの回答
tips
プレビュー