Я знаю , что общепринятый ответ велик , но для тех , кто ищет парения , как чувствую , вы можете использовать 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
соответственно.