我有多个(超过 15 个)div标签作为图块。如果鼠标悬停在它上面,我需要强调每一个。所以每个标签都有onMouseEnter/Leave如下功能。
<div
key={key}
onMouseEnter={onMouseEnter(key)}
onMouseLeave={onMouseLeave(key)}
>
...
</div>
我还将每个图块键放在Map数据结构中。
const onMouseEnter = key => {
return function() {
const newIsHover = new Map(isHover)
newIsHover.set(key, true)
setIsHover(newIsHover)
}
}
const onMouseLeave = key => {
return function() {
const newIsHover = new Map(isHover)
newIsHover.delete(key)
setIsHover(newIsHover)
}
}
由于组件是钩子,它把它的状态放在一个useState.
const [isHover, setIsHover] = useState(new Map())
这里发生了什么:
- 我总是输入一个图块:
onMouseEnter调用函数并将其键添加到地图(如预期的那样) - 当我离开瓷砖时:总是
onMouseLeave被调用,但有时键被移除(如预期的那样)并且瓷砖变回其正常形状但有时它没有(问题就在这里,在这种情况下地图更新setIsHover在onMouseLeave但它在组件中没有改变!)。
我认为地图已按预期更新,但当我移动新瓷砖时,它还不明白这一点。所以它用它所拥有的覆盖它。
PS:添加示例。在瓷砖之间高速移动!