我是 react 新手,只了解基础知识。我从某人那里得到了这个项目,但我从早上开始就因为这个问题而摸不着头脑:“未捕获的类型错误:this.state.persons.map 不是一个函数”。如果您可以尝试检查一下,请尝试它很简单,但在幕后的方式。非常感谢您的帮助。
应用程序组件
class App extends Component {
state = { //not optional name state
persons: [
{ id: "43qtf3w4", name: 'Igor', age: 19},
{ id: "445wgwre", name: 'Vasya', age: 20},
{ id: "t45wg45e",name: "Petya", age: 22}
],
otherState: 'some other value',
showPersons: false,
}
switchNameHandler = (newName) => {
this.setState( {
persons: [
{ name: newName, age: 19},
{ name: 'Vasya', age: 20},
{ name: "Petya", age: 27}
]
} )
}
nameChangedHandler = (event, id) => {
const personIndex = this.state.persons.findIndex( (person) => person.id ===id);
const person = {...this.state.persons[personIndex]};
person.name = event.target.value;
const persons = {...this.state.persons};
persons[personIndex] = person;
this.setState( {
persons: persons
} )
}
deletePersonHandler = (personIndex) => {
const persons = [...this.state.persons];
persons.splice(personIndex, 1);
this.setState( {
persons: persons,
} )
}
togglePersonsHandler = () => {
const doesShow = this.state.showPersons;
this.setState( {
showPersons: !doesShow,
} )
}
render() {
const style = {
backgroundColor: 'white',
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}
changed={(event) => this.nameChangedHandler( event, person.id)}/>
})}
</div>
)
}
return (
<div className="App">
<h1>Hi, I'm a React App</h1>
<p>This is realy working</p>
<button
style={style}
onClick ={ this.togglePersonsHandler}>Toggle Persons</button>
{persons}
</div>
);
}
}
人物组件
const person = (props) => {
return (
<div className="Person">
<p onClick={props.click}>I'm a {props.name} and I am {props.age} years old!</p>
<p>{props.children}</p>
<input type="text" onChange={props.changed} value={props.name}/>
</div>
)
};
最佳答案
在 nameChangeHandler()
函数中,您将 persons
设置为一个对象:
const persons = {...this.state.persons}
没有.map()
关于javascript - this.state.persons.map 不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49603854/