Это мой код:
export default function Test2() {
const [isEditable, setEditable] = useState(false);
const [qty, setQty] = useState();
const [data, setData] = useState([
{id: 1, name: 'paper', qty: 10},
{id: 2, name: 'bottle', qty: 10},
]);
const handleEdit = () => {
setEditable(!isEditable);
}
const handleChange = (e) =>{
setQty(e.target.value);
}
const handleEnter = (e, f) =>{
if(e.key === 'Enter'){
let newArr = data.map((obj) => {
if (obj.id == f) {
obj.qty = qty;
}
return obj;
})
setData(newArr);
setEditable(!isEditable);
}
}
return (
<div>
{data.map((row) => (
<TableRow key={row.id}>
<TableCell>{row.id}</TableCell>
<TableCell>{row.name}</TableCell>
{ isEditable ?
<TableCell>
<TextField id="outlined-basic" size="small" variant="outlined"
onChange=`{handleChange}`
onKeyPress={(e)=> {handleEnter(e, row.id)}}/>
</TableCell> :
<TableCell>{row.qty}</TableCell>
}
<TableCell>
<button onClick={()=> handleEdit()}> Edit </button>
</TableCell>
</TableRow>
))}
</div>
)
}
Здесь у меня есть редактируемая таблица, которая, когда я нажимаю кнопку Edit
, textfield
заменяет qty
входным значением. Но проблема в том, что когда я нажимаю button
, textfields
появляется во всех строках таблицы. Как я могу просто сделать так, чтобы оно появилось там, где я нажимаю кнопку редактирования button
только в этой строке.