У меня есть список пользователей, который содержит имя и адрес электронной почты каждого пользователя. Я хочу отобразить его с помощью метода .map()
в переменной состояния userlist
. Я создал функцию displayusers()
для отображения пользователей, но мне не удалось скомпилировать ошибку.
Код:
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;
Вам нужно привязать вашу функцию displayusers к это. Вы можете сделать это в конструкторе.
Обновите свой код следующим образом:
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;
Думаю, это неправильный ответ. Привязка здесь не требуется.
зачем ему связывать контекст, когда функция вызывается с текущим контекстом
Да, я думаю, что `bind` здесь не нужен.
Я думаю, вы забыли о добавлении атрибута key
к элементу, и в вашей функции карты отсутствует закрывающий тег </div>
.
Смотрите исправленный код:
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>
);
});
}
ключ, однако рекомендуется, но не обязательно, проблема, похоже, связана с закрытием div
@UmairAbid Я отредактировал свой вопрос, добавив <div>
@stonerock исправляет ли она ошибку при добавлении отсутствующего <div>
?
у функции displayUsers, которая возвращает jsx, отсутствует закрывающий тег </div>