我试图设置光标是否超过组件时。
toggleIcon = () => {
this.setState({ isMouseOver: !this.state.isMouseOver });
};
...
<div
onMouseEnter={() => this.toggleIcon()}
onMouseLeave={() => this.toggleIcon()}
>
{isMouseOver ? (
<InfoIcon />
) : (
<NormalIcon />
)}
</div>
当我以正常速度移动光标时,它可以很好地工作。
但是,如果我快速移动光标,则仅触发onMouseEnter
事件,但没有触发onMouseLeave
事件。顺便说一句,InfoIcon
也没有更改为NormalIcon
,即使光标也没有超过该组件。
如果toggleIcon
函数中没有状态管理,即使光标在组件上快速移动,也会触发两个事件。
请教我有什么问题以及我该如何解决。谢谢。:(
您可以使用:悬停效果以更改背景图像。
尝试明确通过所需的状态而不是切换。
toggleIcon = isMouseOver => this.setState({ isMouseOver });
...
onMouseEnter={() => this.toggleIcon(true)}
onMouseExit={() => this.toggleIcon(false)}
const NormalIcon = () => (<div> Normal </div>)
const InfoIcon = () => (<div> Info </div>)
class Thing extends React.Component {
state = { isMouseOver: false };
toggleIcon = () => this.setState(prevState => ({ isMouseOver: !prevState.isMouseOver }));
render = () => {
const { isMouseOver } = this.state;
return (
<div
onMouseEnter={this.toggleIcon}
onMouseLeave={this.toggleIcon}
>
{isMouseOver ? <InfoIcon /> : <NormalIcon />}
</div>
)
}
}
ReactDOM.render(<Thing />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root" />
看起来正常工作。我更改了您的setState
在toggleIcon
中使用一个函数而不是对象,但是除此之外,看起来还不错...