stone rock
stone rock

Reputation: 1953

Not able to display list items using map in reactjs?

I have a userlist which contains name and email id of each user. I want to display it using the .map() method on userlist state variable. I have created displayusers() function to display the users but I am getting failed to compile error.

Code:

import React, { Component } from 'react';

class App extends Component {

  constructor(props){
    super(props);
    this.state = {
          userlist:[
          {'name':'Rohan Singh', 
           'email':'[email protected]'
          },

          {'name':'Mohan Singh', 
           'email':'[email protected]'
          },

          {'name':'Rakesh Roy', 
           'email':'[email protected]'
          },

          {'name':'Sunil Shah', 
           'email':'[email protected]'
          }]
    }
  }

  displayusers(){
        return this.state.userlist.map( user => {
          return(
            <div className="item-card">
               <div className="sub">    
                    <div className="type">Username: {user.name}</div>
                    <div className="members">Email: {user.email}</div>
               </div>
            <div className="del-wrap">
                <img src={require("../../images/cancel.svg")}/>
            </div>
           </div>
            );
        })
  }

  render() {
        return(
          <div className="users-wrap">
                <h1>Users</h1>
                <div className="task-content">
                    <div className="user-wrap">
                        <div className="users">
                             {this.displayusers()}
                        </div>
                    </div>
                </div> 
          </div>
        );
    }
}

export default App;

Upvotes: 1

Views: 56

Answers (2)

Rohan Kangale
Rohan Kangale

Reputation: 971

You need to bind your displayusers function to this. You can do that in the constructor.

Update your code as following:

import React, { Component } from 'react';

class App extends Component {

constructor(props){
 super(props);
 this.state = {
      userlist:[
      {'name':'Rohan Singh', 
       'email':'[email protected]'
      },

      {'name':'Mohan Singh', 
       'email':'[email protected]'
      },

      {'name':'Rakesh Roy', 
       'email':'[email protected]'
      },

      {'name':'Sunil Shah', 
       'email':'[email protected]'
      }]
  };

  this.displayusers = this.displayusers.bind(this); // you need to add this line
 }

 displayusers(){
    return this.state.userlist.map((user, index) => {
      return(
        <div className="item-card" key={index}>
           <div className="sub">    
                <div className="type">Username: {user.name}</div>
                <div className="members">Email: {user.email}</div>
           </div>
        <div className="del-wrap">
            <img src={require("../../images/cancel.svg")}/>
        </div>
        );
    })
}

render() {
    return(
      <div className="users-wrap">
            <h1>Users</h1>
            <div className="task-content">
                <div className="user-wrap">
                    <div className="users">
                         {this.displayusers()}
                    </div>
                </div>
            </div> 
      </div>
    );
  }
}

export default App;

Upvotes: 0

sunpietro
sunpietro

Reputation: 2099

I think you forgot about adding a key attribute to the element and there's missing </div> closing tag in your map function.

See the corrected code:

displayusers(){
    return this.state.userlist.map( user => {
        return(
            <div className="item-card" key={user.name}>
                <div className="sub">    
                    <div className="type">Username: {user.name}</div>
                    <div className="members">Email: {user.email}</div>
                </div>
                <div className="del-wrap">
                    <img src={require("../../images/cancel.svg")}/>
                </div>
            </div>
        );
    });
}

Upvotes: 3

Related Questions