Skip to content
react

How to delete an item from the state array in React?

Apr 1, 2023Abhishek EH3 Min Read
How to delete an item from the state array in React?

Have you started working on React recently and wanted to know the right way to delete an item from an array stored in the useState hook? You are at the right place!

Setting up the project

First, let's create a react project using the following command:

1npx create-react-app react-delete-usestate

Add the following styles to index.css:

index.css
1body {
2 display: flex;
3 justify-content: center;
4}
5
6ul {
7 list-style-type: none;
8 padding: 0;
9}
10li {
11 padding: 6px 0;
12 display: flex;
13 justify-content: space-between;
14}
15
16button {
17 margin-left: 20px;
18}

Now, create an array of fruits, store them in useState hook, and display them along with a delete button.

App.js
1import { useState } from "react"
2
3function App() {
4 const [fruits, setFruits] = useState([
5 "🍎 Apple",
6 "🍊 Orange",
7 "🍌 Banana",
8 "🍇 Grapes",
9 ])
10 return (
11 <div className="App">
12 <ul>
13 {fruits.map(fruit => {
14 return (
15 <li key={fruit}>
16 <span>{fruit}</span>
17 <button>Delete</button>
18 </li>
19 )
20 })}
21 </ul>
22 </div>
23 )
24}
25
26export default App

If you run the app now, you should be able to see the list of fruits as shown below:

list of fruits with delete button

Different ways of deleting

Deleting by value

If you are sure that you have a unique list of items, then you can delete the item using the value:

App.js
1import { useState } from "react"
2
3function App() {
4 const [fruits, setFruits] = useState([
5 "🍎 Apple",
6 "🍊 Orange",
7 "🍌 Banana",
8 "🍇 Grapes",
9 ])
10 const deleteByValue = value => {
11 setFruits(oldValues => {
12 return oldValues.filter(fruit => fruit !== value)
13 })
14 }
15 return (
16 <div className="App">
17 <ul>
18 {fruits.map(fruit => {
19 return (
20 <li key={fruit}>
21 <span>{fruit}</span>
22 <button onClick={() => deleteByValue(fruit)}>Delete</button>
23 </li>
24 )
25 })}
26 </ul>
27 </div>
28 )
29}
30
31export default App

Here, we are passing a callback to the setFruits function. Inside the callback, we are calling the filter function, which filters all the values except the one passed to the deleteByValue, hence deleting the passed value.

Deleting by index

If you think you can have duplicate values and you want to delete them by the array index, you can achieve it in a similar fashion.

App.js
1import { useState } from "react"
2
3function App() {
4 const [fruits, setFruits] = useState([
5 "🍎 Apple",
6 "🍊 Orange",
7 "🍌 Banana",
8 "🍇 Grapes",
9 ])
10 const deleteByIndex = index => {
11 setFruits(oldValues => {
12 return oldValues.filter((_, i) => i !== index)
13 })
14 }
15 return (
16 <div className="App">
17 <ul>
18 {fruits.map((fruit, index) => {
19 return (
20 <li key={fruit}>
21 <span>{fruit}</span>
22 <button onClick={() => deleteByIndex(index)}>Delete</button>
23 </li>
24 )
25 })}
26 </ul>
27 </div>
28 )
29}
30
31export default App

Deleting an object from the array

If you have an array of objects and you want to delete them based on the id of the object, you can do so by using the following code:

App.js
1import { useState } from "react"
2
3function App() {
4 const [fruits, setFruits] = useState([
5 { id: 1, name: "🍎 Apple" },
6 { id: 2, name: "🍊 Orange" },
7 { id: 3, name: "🍌 Banana" },
8 { id: 4, name: "🍇 Grapes" },
9 ])
10 const deleteById = id => {
11 setFruits(oldValues => {
12 return oldValues.filter(fruit => fruit.id !== id)
13 })
14 }
15 return (
16 <div className="App">
17 <ul>
18 {fruits.map(fruit => {
19 return (
20 <li key={fruit.id}>
21 <span>{fruit.name}</span>
22 <button onClick={() => deleteById(fruit.id)}>Delete</button>
23 </li>
24 )
25 })}
26 </ul>
27 </div>
28 )
29}
30
31export default App

My favorite way of deleting is deleting by id, followed by the index. Let me know which is your favorite in the comments below 👇.

Do follow me on twitter where I post developer insights more often!

© 2024 CodingDeft.Com