Home > Software engineering >  state' is not defined no-undef
state' is not defined no-undef

Time:12-28

So I’m following a course on React and I can't figure out how to solve this. It suggests me that I put Spread operator '...' instead of 'this.' to select elements from the array. But when I do that it still shows error 'state' is not defined no-undef'. Im new to React, so am I doing something wrong here?

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
import { render } from '@testing-library/react';
import React from 'react';
import { Component } from 'react/cjs/react.production.min';
import './App.css';
import Person from './Person/Person';

class App extends Component {
  state = {
    persons: [{name: 'Max', age: 22},
              {name: 'Manu', age: 19},
              {name: 'Stephanie', age: 41},
              {name: 'George', age: 40}
            ]
    
  }

  render() {
  return (
    <div className="App">
     <h1>Hi, I am a React App</h1>
    <p>This is really working!</p>
    <button>Switch Name</button>
    <Person name= {this.state.persons[0].name} {this.state.persons[0].age}/>
    <Person {this.persons[1].name} {this.state.persons[1].age}/>
    <Person {this.state.persons[2].name} {this.state.persons[2].age}> My Hobbie is swimming.</Person>
    <Person {this.state.persons[3].name} {this.state.persons[3].age}/>
    </div>
  );
}
}


export default App;

CodePudding user response:

Assuming <Person /> component accepts age and name properties you can spread entire object with matching properties to this component using spread syntax as following:

<Person {...{this.persons[0]}} />

The above is equivalent yet shorthand for

<Person name={this.persons[0].name} age={this.persons[0].age} />

Please also note a wrong syntax you were inserting:

<Person name= {this.state.persons[0].name} {this.state.persons[0].age}/>

First, the space shouldn't be there as you need to pass a value to a given property unlike to the vanilla JS syntax where you can create a variable with or woithout spaces:

const x = 1; or const x=1;

Secondly, you are trying to pass age value to component but you haven't pointed out which property it should be assigned to.

Keep up and good luck.

  • Related