如何在Reactjs 中为自己在地图中设置悬停
hoverOn = () => {
this.setState({ hover: true});
}
hoverOff = () => {
this.setState({ hover: false });
}
...
var components = posts.map((post, i) => (
.....
<span className={this.state.hover ? 'showtooltip':'hidetooltip'} onHover={this.hoverOn} onMouseOut={this.hoverOff} onClick={(e) => this.viewPost(post, e)}><i className="quickview-button"></i></span>
......
));
由于我使用setState,每次我将鼠标悬停在span
上时,它都会反映从映射循环返回的所有列表数据。如何使用悬停来反映自身元素?
非常感谢
将此逻辑封装在一个小组件中:
class Foo extends React.Component {
constructor(){
this.state = { hover: false };
}
render(){
return <span
{ ...this.props }
className={ this.state.hover ? 'showtooltip':'hidetooltip' }
onHover={ () => this.setState({ hover: true }) }
onMouseOut={ () => this.setState({ hover: false }) }
/>;
}
}
并使用该组件:
...
var components = posts.map((post, i) => (
.....
<Foo onClick={(e) => this.viewPost(post, e)}><i className="quickview-button"></i></Foo>
......
));
您可以将状态内的hover
设置为对象state = { hover: {} }
,并在事件(即this.setState({ hover: {...this.state.hover, i: true }});
(上使用索引i
对其进行设置。
然后将i
参数传递给那些方法onHover={(i) => this.hoverOn(i)}
并将className设置更改为<span className={this.state.hover[i] ? 'showtooltip':'hidetooltip'}
(感谢@kenny注意到这一点(