Javascript React Item.map不是一个函数
我正在尝试为状态数组personState中的值实现名称更改处理程序Javascript React Item.map不是一个函数,javascript,reactjs,Javascript,Reactjs,我正在尝试为状态数组personState中的值实现名称更改处理程序 const [personState, setPersonState] = useState([ { id:'asdasd', name: "Max", age: 28 }, { id:'asdasdsd', name: "Manu", age: 29 }, { id:'assddasd', name: "
const [personState, setPersonState] = useState([
{ id:'asdasd', name: "Max", age: 28 },
{ id:'asdasdsd', name: "Manu", age: 29 },
{ id:'assddasd', name: "Stan", age: 31 },
]);
下面是处理名称更改事件的函数:
const nameChangeHandler = (event, id) => {
const personIndex = personState.findIndex(p => {
return p.id === id;//find index of the value in personstate with id equal id passed in
})
const person = {...personState[personIndex]} // get all the object value inside that person
person.name = event.target.value; //change name of that copy person to the input value
const persons = [...personState]; //copy array of current personState
persons[personIndex] = person// change value of that person in the array
setPersonState(...personState, persons);//set state with the new array
}
下面是我使用map迭代personState数组的地方,如果出现切换。映射工作用于显示数据以及删除数据,但当我想要实现名称更改时,它突然返回:
TypeError: personState.map is not a function
App
D:/React App/react-guide/src/App.js:52
49 | <button onClick={() => togglePersonHandler()}>
50 | Switch Name
51 | </button>
> 52 | {showPerson ? personState.map((person,index) => {
53 | return <Person click = {()=>deletePersonHandler(index)} changed={(event) => nameChangeHandler(event, person.id)} key={person.id} name={person.name} age ={person.age}/>
54 | }) : null}
55 | </div>
TypeError:personState.map不是函数
应用程序
D:/React-App/React-guide/src/App.js:52
49 | togglePersonHandler()}>
50 |开关名称
51 |
>52 |{showPerson?personState.map((person,index)=>{
53 | return deletePersonHandler(index)}changed={(event)=>nameChangeHandler(event,person.id)}key={person.id}name={person.name}age={person.age}/>
54 |}):null}
55 |
任何帮助都将不胜感激这是罪魁祸首:
setPersonState(...personState, persons);//set state with the new array
应将其替换为新值(仅一个参数)
这就是罪魁祸首:
setPersonState(...personState, persons);//set state with the new array
应将其替换为新值(仅一个参数)
您需要检查
人员状态中的内容。尝试使用console.log您的意思是setPersonState([…personState,persons])
而不是setPersonState(…personState,persons)
?您没有正确更新状态,nameChangeHandler
函数不必要地复杂。通过使用map()
方法更新personState
数组,可以简化此函数中的代码。您可以简化nameChangeHandler
函数并正确更新状态。谢谢大家,答案写在下面。您需要检查personState中的内容。尝试使用console.log您的意思是setPersonState([…personState,persons])
而不是setPersonState(…personState,persons)
?您没有正确更新状态,nameChangeHandler
函数不必要地复杂。通过使用map()
方法更新personState
数组,可以简化此函数中的代码。您可以简化nameChangeHandler
函数并正确更新状态。谢谢大家,答案写在下面。