Javascript 仅显示悬停在地图上的项目
我真的很惊讶这不是我预期的工作 我想在访问站点的人将鼠标悬停在用户的消息上时显示用户名。下面是我到目前为止的代码。问题是,当我将鼠标悬停在消息上时,我映射到的数组中的每个用户名都会出现。我如何更改它,使其仅为一个用户名 我想我需要在一个单独的组件中更改每个用户消息的状态,但是,我不认为这是必要的Javascript 仅显示悬停在地图上的项目,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我真的很惊讶这不是我预期的工作 我想在访问站点的人将鼠标悬停在用户的消息上时显示用户名。下面是我到目前为止的代码。问题是,当我将鼠标悬停在消息上时,我映射到的数组中的每个用户名都会出现。我如何更改它,使其仅为一个用户名 我想我需要在一个单独的组件中更改每个用户消息的状态,但是,我不认为这是必要的 class App extends Component { state = { showUsername: false }; showUsername = (
class App extends Component {
state = {
showUsername: false
};
showUsername = () => {
this.setState({
showUsername: true
});
}
hideUsername = () => {
this.setState({
showUsername: false
});
}
render() {
let messageArr = this.props.messages.map(msg => {
let name = `${msg.firstName} ${msg.lastName}`;
return(
<div key={msg.id}>
{this.state.showUsername && (
<span>{name}</span>
)}
<li><span onMouseEnter={this.showUsername} onMouseLeave{this.hideUsername}>{msg.message}</span></li>
</div>
);
});
return (
<ul>
{messageArr}
</ul>
);
}
}
类应用程序扩展组件{
状态={
showUsername:false
};
showUsername=()=>{
这是我的国家({
showUsername:true
});
}
hideUsername=()=>{
这是我的国家({
showUsername:false
});
}
render(){
让messageArr=this.props.messages.map(msg=>{
让name=`${msg.firstName}${msg.lastName}`;
返回(
{this.state.showUsername&&(
{name}
)}
{msg.message}
);
});
返回(
{messageArr}
);
}
}
我想我需要在一个单独的组件中更改每个用户消息的状态,但是,我不认为这是必要的
是的,这是必要的
到目前为止,有一种常见的状态showUsername
用于显示用户名,这就是为什么会产生这种效果
showUsername = (oneUserMessage) => {
oneUserMessage.showUsername = true; // updating via reference
}
hideUsername = (oneUserMessage) => {
oneUserMessage.showUsername = false;// updating via reference
}
//在渲染中返回
return (
<div key={msg.id}>
{msg.showUsername && (
<span>{name}</span>
)}
<li><span
onMouseEnter={()=>{this.showUsername(msg)}}
onMouseLeave={()=>{this.hideUsername(msg)}}>
{msg.message}</span></li>
</div>
);
返回(
{msg.showUsername&&(
{name}
)}
{this.showUsername(msg)}
onMouseLeave={()=>{this.hideUsername(msg)}}>
{msg.message}
);
您的组件是这样运行的,因为this.state.showUsername
是组件内部的一种状态。
因此,无论哪个div处于悬停状态,它都会将状态设置为true
,其他所有div都会将此.state.showUsername
作为true
接收
这使它们都可见
您应该做的是,编写一个包含div
及其内部逻辑的新组件。因此,当您向下映射时,每个div
都有自己的状态
另一件事,你可以这样绘制地图:
const messageArr = this.props.messages.map((msg) => <div key={msg.id}>
<li>
<span onMouseEnter={this.showUsername} onMouseLeave{this.hideUsername}>{msg.message}</span>
</li>
</div>);
const messageArr=this.props.messages.map((msg)=>
{msg.message}
);
所以不需要返回语句:)