useStateで特定の配列の値を変更したいです。。
値が複数存在する入力フォームを作っています
inputの値がonChangeイベントで変更された時にuseStateの更新関数(今回はsetState)で値を保存したいです
その際にitemsの値が配列のためそのidと一致するラベルorデータを変更したいです
react
1const sampleArr = []; 2const [items, setState] = useState(sampleArr); 3 4const sampleInputChange = (id, key, newValue) => { 5 /** 6 * id 変更があったid 7 * key sample_labelsなどのキー 8 * newValue 新しい文字など 9 */ 10 console.log(id); 11 console.log(key); 12 console.log(newValue); 13 /** 14 * useStateで値を変更したい 15 */ 16 // let addValue = { sample_id: id, sample_labels: newValue, sample_data: 1 } 17 // setState([...items, addValue]); 18} 19 20return ( 21 <> 22 {items.map((item) => ( 23 <div key={item.sample_id}> 24 <div className="sample_block_input_area"> 25 <TextControl 26 className="sample_block_input_sample_id" 27 name="sample_id" 28 // type="hidden" 29 value={item.sample_id} 30 /> 31 <TextControl 32 className="sample_block_input_sample_labels" 33 name="sample_labels" 34 value={item.sample_labels} 35 data-control={item.sample_id} 36 onChange={ 37 (newValue) => sampleInputChange(item.sample_id, 'sample_labels', newValue) 38 } 39 /> 40 <TextControl 41 className="sample_block_input_sample_data" 42 name="sample_data" 43 type="number" 44 value={item.sample_data} 45 data-control={item.sample_id} 46 onChange={ 47 (newValue) => sampleInputChange(item.sample_data, 'sample_data', newValue) 48 } 49 /> 50 </div> 51 </div> 52 ))} 53 </> 54);
itemsはconsole.logで表示するとこのような配列になっています
(3)[{… }, {… }, {… }] 0: { sample_id: 0, sample_labels: 'English', sample_data: 300 } 1: { sample_id: 1, sample_labels: 'Spanish', sample_data: 50 } 2: { sample_id: 2, sample_labels: 'French', sample_data: 50 }
試したこと
if ( key == sample_labels ) { let addValue = { sample_id: id, sample_labels: newValue } } if ( key == sample_data ) { let addValue = { sample_id: id, sample_data: newValue } } items.map(item => (item.sample_id === id ? setState(addValue) : item))
これでは保存されないです
お心優しい方アドバイスいただきたいです
よろしくおねがいします。
あなたの回答
tips
プレビュー