I'm trying to make a button that deleted an object from an array (which is the state) depending on the passed index, I've tried alot but none of my ways worked :( , so this is the code and hope i can find someone to help:
state:
const [items, setItems] = useState([{ name: "", quantity: "", unit: "" }]);
deleting function:
const deleteItem = (i) => {
const newItems = [...items]
newItems.splice(i, 1)
setItems(newItems)
}
jsx elements:
{
items.map((item, i) => {
return (
<div key={i} className={`mt3 item-input-wrapper`}>
<div>some other els here</div>
<button onClick={() => deleteItem(i)} >delete item</button>
</div>
)
})
}
I'm trying to make a button that deleted an object from an array (which is the state) depending on the passed index, I've tried alot but none of my ways worked :( , so this is the code and hope i can find someone to help:
state:
const [items, setItems] = useState([{ name: "", quantity: "", unit: "" }]);
deleting function:
const deleteItem = (i) => {
const newItems = [...items]
newItems.splice(i, 1)
setItems(newItems)
}
jsx elements:
{
items.map((item, i) => {
return (
<div key={i} className={`mt3 item-input-wrapper`}>
<div>some other els here</div>
<button onClick={() => deleteItem(i)} >delete item</button>
</div>
)
})
}
Share
Improve this question
edited Apr 1, 2020 at 19:09
Foxeye.Rinx
4392 silver badges7 bronze badges
asked Apr 1, 2020 at 18:05
Salah Eddine MakdourSalah Eddine Makdour
1,0521 gold badge14 silver badges24 bronze badges
1 Answer
Reset to default 8You can do it with filter
:
const deleteItem = (i) => {
setItems(currentItems => currentItems.filter((item, index) => index !== i));
}
Altho you'd probably use smth more constant for accessing an item, like an id.