Je sais que la réponse acceptée est grande , mais pour tous ceux qui cherchent un vol stationnaire comme l' impression que vous pouvez utiliser setTimeoutsur mouseoveret enregistrez la poignée dans une carte (de liste disons LET les ids à setTimeout poignée). Sur mouseovereffacez la poignée de setTimeout et supprimez-la de la carte
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
Et implémentez la carte comme suit:
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];
}
Et la carte est comme ça,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Je préfère onMouseOveret onMouseOutparce que cela s'applique également à tous les enfants du HTMLElement. Si cela n'est pas nécessaire, vous pouvez utiliser onMouseEnteret onMouseLeaverespectivement.