javascript - this.state.persons.map 不是一个函数

标签 javascript reactjs

我是 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/

相关文章:

javascript - 如何在jquery中获取除输入类型="hidden"之外的td innerhtml值

javascript - Mobx 和 React。可观察到的变化后如何处理焦点输入?

javascript - SyntaxError : C:/workspace/src/app. jsx:意外标记 (115:36)

javascript - React Native 应用程序的 UI(在 iOS 上)滞后并且 fps 速率定期下降

javascript - 在子悬停时更改父背景

javascript - JQuery 选择 : Not Updating Select Option In Background

php - 使用 Ajax 实时更改数据库

javascript - 如何检查数组中每个元素的特定条件

javascript - react 闪存消息 : How to make the message show without refreshing the page but refresh on 200

reactjs - 使用 React 为 Leaflet 安装 Overlapping Marker Spiderfier