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