'this' 使用按钮 reactjs 映射列表时出现问题
'this' issue while mapping a List with button reactjs
我正在映射来自 GET 请求的结果。映射工作正常。我在按钮上获得了每个用户的图片、姓名甚至正确的标签。但是当我在按钮上 console.log
时,我想获取用户的信息。当我单击该按钮时,它会显示 user_id
所有用户而不是特定用户。
{filteredEmails.map(user => {
return (
<List>
<div className="mail" key={user.user_id}>
<ListItem
key={user.user_id}
disabled={true}
leftAvatar={
<Avatar size={80} src={user.picture} />
}
rightIconButton={
<RaisedButton
label={user.name}
primary={true}
key={user.user_id}
onTouchTap={console.log(user.user_id)}
style={style} />
}
>
<div className="searchContent" key={user.user_id}>
<div className="subject">{user.name}</div>
<br></br>
<div className="from">{user.email}</div>
<br></br>
<div className="subject">{user.identities[0].provider}</div>
</div>
</ListItem>
</div>
</List>
);
})}
Mapping users picture
在上图中,我想按下按钮并获得用户的user_id
或name
。我好像做不到。
我的猜测是 this
上下文有问题,但我目前无法修复它。
您需要将一个函数传递给 onTouchTap
事件,并将 user_id 的值绑定到该事件,这样每当用户单击按钮时,特定的 user_id 就会被传递到该函数,然后在里面执行 console.log()
它将打印正确的值。
像这样:
onTouchTap={() => this._handleClick(user.user_id)}
像这样定义 _handleClick
函数:
_handleClick(user_id){
console.log(user.user_id)
}
您还需要为 map
中的每个列表项定义唯一键,否则会引发警告,user_id 将具有您也可以使用的唯一值。
这样写map
:
{filteredEmails.map(user => {
return (
<List key={user.user_id}>
<div className="mail">
<ListItem
key={user.user_id}
disabled={true}
leftAvatar={
<Avatar size={80} src={user.picture} />
}
rightIconButton={<RaisedButton
label={user.name}
primary={true}
key={user.user_id}
onTouchTap={onTouchTap={() => this._handleClick(user.user_id)}}
style={style} />
}
>
<div className="searchContent" key={user.user_id}>
<div className="subject">{user.name}</div>
<br></br>
<div className="from">{user.email}</div>
<br></br>
<div className="subject">{user.identities[0].provider}</div>
</div>
</ListItem>
</div>
</List>
);
})}
我正在映射来自 GET 请求的结果。映射工作正常。我在按钮上获得了每个用户的图片、姓名甚至正确的标签。但是当我在按钮上 console.log
时,我想获取用户的信息。当我单击该按钮时,它会显示 user_id
所有用户而不是特定用户。
{filteredEmails.map(user => {
return (
<List>
<div className="mail" key={user.user_id}>
<ListItem
key={user.user_id}
disabled={true}
leftAvatar={
<Avatar size={80} src={user.picture} />
}
rightIconButton={
<RaisedButton
label={user.name}
primary={true}
key={user.user_id}
onTouchTap={console.log(user.user_id)}
style={style} />
}
>
<div className="searchContent" key={user.user_id}>
<div className="subject">{user.name}</div>
<br></br>
<div className="from">{user.email}</div>
<br></br>
<div className="subject">{user.identities[0].provider}</div>
</div>
</ListItem>
</div>
</List>
);
})}
Mapping users picture
在上图中,我想按下按钮并获得用户的user_id
或name
。我好像做不到。
我的猜测是 this
上下文有问题,但我目前无法修复它。
您需要将一个函数传递给 onTouchTap
事件,并将 user_id 的值绑定到该事件,这样每当用户单击按钮时,特定的 user_id 就会被传递到该函数,然后在里面执行 console.log()
它将打印正确的值。
像这样:
onTouchTap={() => this._handleClick(user.user_id)}
像这样定义 _handleClick
函数:
_handleClick(user_id){
console.log(user.user_id)
}
您还需要为 map
中的每个列表项定义唯一键,否则会引发警告,user_id 将具有您也可以使用的唯一值。
这样写map
:
{filteredEmails.map(user => {
return (
<List key={user.user_id}>
<div className="mail">
<ListItem
key={user.user_id}
disabled={true}
leftAvatar={
<Avatar size={80} src={user.picture} />
}
rightIconButton={<RaisedButton
label={user.name}
primary={true}
key={user.user_id}
onTouchTap={onTouchTap={() => this._handleClick(user.user_id)}}
style={style} />
}
>
<div className="searchContent" key={user.user_id}>
<div className="subject">{user.name}</div>
<br></br>
<div className="from">{user.email}</div>
<br></br>
<div className="subject">{user.identities[0].provider}</div>
</div>
</ListItem>
</div>
</List>
);
})}