Created
August 31, 2023 11:07
-
-
Save solanoize/1bc0b3bb3cd4c31ba2e8196728cc8abc to your computer and use it in GitHub Desktop.
Update Array Item in React useState
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { useState } from "react"; | |
| import Message from "./components/Message"; | |
| import Motor from "./components/Motor" | |
| import Uhuy from "./components/Uhuy" | |
| const App = () => { | |
| let [data, setData] = useState({ | |
| name: "", | |
| items: [ | |
| {name: "A", total: 0}, | |
| {name: "B", total: 0}, | |
| ] | |
| }); | |
| const updateItem = (i, e) => { | |
| const name = e.target.name; | |
| const value = e.target.value; | |
| setData((values) => { | |
| let currentValues ={...values}; | |
| let currentItem = currentValues.items[i]; | |
| if (name === "total") { | |
| currentItem.total = parseInt(value); | |
| } else if (name === "name") { | |
| currentItem.name = value; | |
| } | |
| return currentValues | |
| }) | |
| } | |
| const addItem = () => { | |
| setData((values) => { | |
| let currentValues = {...values}; | |
| currentValues.items.push({name: "", total: 0}); | |
| return currentValues | |
| }) | |
| } | |
| return ( | |
| <> | |
| <div> | |
| <button onClick={addItem}>Add Items</button> | |
| </div> | |
| {data.items.map((item, i) => ( | |
| <div key={i}> | |
| <input type="text" name="name" value={item.name} onChange={(e) => updateItem(i, e)} /> | |
| <input type="number" name="total" value={item.total} onChange={(e) => updateItem(i, e)} /> | |
| </div> | |
| ))} | |
| <ul> | |
| {data.items.map((item, i) => ( | |
| <li key={i}>{item.name} - {item.total}</li> | |
| ))} | |
| </ul> | |
| </> | |
| ) | |
| } | |
| export default App |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment