Я знаю , что общепринятый ответ велик , но для тех , кто ищет парения , как чувствую , вы можете использовать setTimeoutна mouseoverи сохранить ручку на карте (скажем список идентификаторов ДАВАЙТЕ к SetTimeout Handle). На mouseoverочистить ручку от SetTimeout и удалить его с карты
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
И реализуем карту следующим образом:
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];
}
А карта такая,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Я предпочитаю, onMouseOverи onMouseOutпотому что это также применимо ко всем детям в HTMLElement. Если это не требуется, вы можете использовать onMouseEnterи onMouseLeaveсоответственно.