The form data is set by an the data object. Need help figuring out how to update /handleChange the text inputs
I've tried unique name, those probably won't work because it wont match the "key" in the object. Any help / input is appreciated!
Data:
export default { name: "Restaurants Name", menu: [ { category: "Appetizers", items: [ { imgurl: "https://source.unsplash.com/400x200/?863127", title: "Food 2", desc: "", price: "500" }, { imgurl: "", title: "Food 1", desc: "", price: "300" } ] }, { category: "Entree", items: [ { imgurl: "https://source.unsplash.com/400x200/?863127", title: "Entree 1", desc: "", price: "500" }, { imgurl: "", title: "Entree 1", desc: "", price: "300" } ] }, ] }
Code:
import React, { useEffect, useState } from "react"; import "./../App.css" import MenuData from "../data" function Edit() { const [formState, setFormState] = useState(MenuData); useEffect(() => { console.log(formState) }, []); const handleNameChange = (event) => { const name = event.target.name; // console.log(name) setFormState(prevState => ({ formState: { // object that we want to update ...prevState.formState, // keep all other key-value pairs [name]: event.target.value, // update the value of specific key menu: { ...prevState.menu, items: { ...prevState.menu.items } } } })) // setFormState({ // ...formState, // [name]: event.target.value, // }) }; const handleChange = (categoryIndex, event) => { // const values = [...formState] // values[categoryIndex][event.target.name] = event.target.value; // setFormState(values); const name = event.target.name; // setFormState(prevState => ({ // formState: { // ...prevState.formState, // menu: { // ...prevState.menu, // items{ // ...prevState.items // } // } // } // })); }; return ( <div className="App"> <div> <input name="nameField" id="nameField" maxLength="300" value={formState.name} onChange={handleNameChange} /> <br /> {formState.menu && formState.menu.map((menuitem, categoryIndex) => { return ( <div key={categoryIndex}> <div class="line"></div> <h2>{menuitem.category}</h2> <input name={"category-" + categoryIndex} id="CategoryField" maxLength="40" categoryIndex={categoryIndex} onChange={event => handleChange(categoryIndex, event)} value={menuitem.category} /> { menuitem.items.map((item, index) => { return( <div key={index}> <input name={"title-" + index + categoryIndex} id="titleField" maxLength="40" categoryIndex={categoryIndex} onChange={handleChange} value={item.title} /> <br /> <input name="desc" id="descField" maxLength="200" categoryIndex={categoryIndex} onChange={handleChange} value={item.desc} /> <br /><br /> </div> ) }) } </div> ) } ) } </div> </div> ); } export default Edit;
UPDATED
- Not able to figure out the onChange function to updated nested items
没有评论:
发表评论