javascript - TypeError:this.state.persons.map 不是函数谢谢
问题描述
我是新手,只了解基础知识。我从某人那里得到了这个项目来查看,但是从早上起我就一直在为这个问题挠头:
Uncaught TypeError: this.state.persons.map is not a function.
请,如果您可以尝试以简单但在引擎盖下的方式进行检查。谢谢你!
import React, { useState, Component } from 'react';
import './App.css';
import Person from './Person/Person';
import person from './Person/Person';
import { render } from '@testing-library/react';
class App extends Component {
state =
{
persons:[
{id: '123', name:'Max', age: 28 },
{id: '124',name:'Mari', age: 26 },
{id: '125',name: 'laly', age: 20 }
],
showPersons: false
}
nameChangeHandler=( event,id ) =>
{ const personIndex = this.state.persons.findIndex(p=>{
return p.id === id;
});
const person = {...this.state.persons[personIndex]
};
person.name=event.target.value;
const persons=[ ...this.state.persons];
persons[personIndex]=person;
this.setState(
{
persons:person
}
)
}
togglePersonHandler = ()=>
{
const doesShow = this.state.showPersons;
this.setState ({showPersons: !doesShow});
}
deletePersonHandler= (personIndex)=> {
//const persons = this.state.persons;
const persons = [...this.state.persons]
persons.splice(personIndex,1);
this.setState({persons:persons});
}
render()
{
const style ={
backgroundColor:'yellow',
font:'inherit',
border:'1px solid blue',
padding:'8px',
cursor:'pointer'
};
let persons=null;
if (this.state.showPersons){
persons= (
<div>
{this.state.persons.map((person,index)=> {return <Person click={() => this.deletePersonHandler(index)}
name = {person.name}
age = {person.age}
key={person.id}
change ={(event) => this.nameChangeHandler(event,person.id)}
/>
})};
</div>)
};
return (
<div className="App">
<h1>Hi This is react App</h1>
<button style={style} onClick={this.togglePersonHandler}> Toggle Persons</button>
{persons}
</div>
);
}
}
export default App;
解决方案
错误在这里:
nameChangeHandler=( event,id ) =>
{ const personIndex = this.state.persons.findIndex(p=>{
return p.id === id;
});
const person = {...this.state.persons[personIndex]
};
person.name=event.target.value;
const persons=[ ...this.state.persons];
persons[personIndex]=person;
this.setState(
{
persons:person ------------ > You are assigning a single object to a list in your state, so your map is giving an error, it must be {persons: persons}
}
)
}
推荐阅读
- node.js - NodeJS request.get 正文
- .net - 如何在 msbuild 15.0 命令行中指定私有 nuget 包源?
- javascript - 如果 React Native 以最高 60fps 运行,如何更快地处理事件
- android - 使用 Android 相机应用程序以与启动时不同的方向拍照后应用程序崩溃
- java - 休眠 - 多对一关联,无法加载实体
- c++ - 当我在 C++ 中使用 OpenMp 的折叠时出错
- linux - 如何使用 armv8l-gnueabi 交叉编译 ARM64 的 32 位 Linux 内核?
- opencart - Opencart如何在搜索页面显示产品的型号值
- android - 如何编写查询以从 SD 中的 db 文件存储中获取数据库版本
- android - android.view.TextureView 无法转换为 android.widget.TextView | 不能让它工作