Eu sei a resposta aceita é grande, mas para quem está à procura de um hover como a sensação que você pode usar setTimeout
em mouseover
e salvar o punho em um mapa (de, digamos lista ids deixou-nos para setTimeout Handle). Em mouseover
limpar o identificador de setTimeout e excluí-lo do mapa
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
E implemente o mapa da seguinte maneira:
onMouseOver(listId: string) {
this.setState({
... // whatever
});
const handle = setTimeout(() => {
scrollPreviewToComponentId(listId);
}, 1000); // Replace 1000ms with any time you feel is good enough for your hover action
this.hoverHandleMap[listId] = handle;
}
onMouseOut(listId: string) {
this.setState({
... // whatever
});
const handle = this.hoverHandleMap[listId];
clearTimeout(handle);
delete this.hoverHandleMap[listId];
}
E o mapa é assim,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Eu prefiro onMouseOver
e onMouseOut
porque também se aplica a todas as crianças do HTMLElement
. Se isso não for necessário, você pode usar onMouseEnter
e onMouseLeave
respectivamente.