Sé que la respuesta aceptada es grande, pero para cualquier persona que esté buscando un vuelo estacionario como la sensación puede utilizar setTimeouten mouseovery guardar el mango en un mapa (de la lista de identificadores de digamos vamos a setTimeout Mango). Al mouseoverborrar el identificador de setTimeout y eliminarlo del mapa
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
E implemente el mapa de la siguiente manera:
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];
}
Y el mapa es así
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Yo prefiero onMouseOvery onMouseOutporque también se aplica a todos los niños del HTMLElement. Si no es necesario, puede utilizar onMouseEntery onMouseLeaverespectivamente.