Aku tahu jawaban yang diterima adalah besar, tetapi untuk siapa saja yang mencari hover seperti merasa Anda dapat menggunakan setTimeoutdi mouseoverdan menyimpan pegangan dalam peta (katakanlah daftar id untuk Handle setTimeout). Pada mouseovermembersihkan pegangan dari setTimeout dan menghapusnya dari peta
onMouseOver={() => this.onMouseOver(someId)}
onMouseOut={() => this.onMouseOut(someId)
Dan implementasikan peta sebagai berikut:
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];
}
Dan petanya seperti itu,
hoverHandleMap: { [listId: string]: NodeJS.Timeout } = {};
Saya lebih suka onMouseOverdan onMouseOutkarena itu juga berlaku untuk semua anak di HTMLElement. Jika ini tidak diperlukan, Anda dapat menggunakan onMouseEnterdan onMouseLeavemasing - masing.