前提・実現したいこと
Reactで動画を複数個登録できる動的フォームを作成しております。
Formは動的に追加できたのですが、Stateを正常に変更できません。
動的フォームではどのように入れ子にしているStateを変更すればいいのでしょうか?
発生している問題・エラーメッセージ
下記ソースコードでFlgを変更するとフォームが追加され、Stateの値が正常に入らない。
該当のソースコード
React.js
1export const VideoForm = (prop) => { 2 const initialVideoState = { 3 'video': '', 4 'valid_flg': false, 5 } 6 7 const [title, setTitle] = useState(""); 8 const [video, setVideo] = useState([initialVideoState]); 9 10 const handleSubmit = (e) => { 11 e.preventDefault(); 12 13 const formData = new FormData(); 14 formData.append('title', title); 15 formData.append('project', prop.projectId); 16 video.map(v => { 17 formData.append('video', v.video, v.video.name); 18 formData.append('valid_flg', v.valid_flg); 19 }) 20 21 // API通信 22 } 23 24 const AddForm = (e) => { 25 e.preventDefault(); 26 var newVideo = []; 27 video.map(v =>{ 28 newVideo.push(v); 29 }); 30 newVideo.push(initialVideoState); 31 console.log('追加イベント') 32 setVideo(newVideo); 33 } 34 35 // ここで正常に値が入らず、フォームが一つ追加される 36 const handleChange = (hogehoge, e) => { 37 e.preventDefault(); 38 var target = video.find(v => v===hogehoge); 39 40 setVideo([ 41 ...video, 42 video.find(v => v===hogehoge)['valid_flg'] = true 43 ]); 44 console.log(video); 45 } 46 47 return( 48 <> 49 <label> 50 タイトル: 51 <input type="text" name="title" value={ title } onChange={ (e) => setTitle(e.target.value) } /> 52 </label> 53 {video.map(v => 54 <div> 55 <label> 56 動画: 57 <input type="file" name="video" accept='video/*' alt="動画" /> 58 </label> 59 <label> 60 フラグ: 61 <input type="checkbox" name="valid_flg" onChange={ (e) => handleChange(v, e) } checked={v.valid_flg} /> 62 </label> 63 </div> 64 )} 65 </> 66 ) 67}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/29 09:16