Javascript React Item.map不是一个函数

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: "

我正在尝试为状态数组personState中的值实现名称更改处理程序

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
函数并正确更新状态。谢谢大家,答案写在下面。