Mam sidenav z wieloma drużynami koszykówki. Dlatego chciałbym wyświetlić coś innego dla każdego zespołu, gdy jeden z nich jest najechany kursorem. Używam również Reactjs, więc gdybym mógł mieć zmienną, którą mógłbym przekazać do innego komponentu, byłby niesamowity.
101
Odpowiedzi:
Komponenty React ujawniają wszystkie standardowe zdarzenia myszy JavaScript w swoim interfejsie najwyższego poziomu. Oczywiście nadal możesz używać
:hover
w swoim CSS i może to być wystarczające dla niektórych Twoich potrzeb, ale dla bardziej zaawansowanych zachowań wywoływanych przez najechanie kursorem będziesz musiał użyć JavaScript. Aby zarządzać interakcjami po najechaniu, będziesz chciał używaćonMouseEnter
ionMouseLeave
. Następnie dołączasz je do programów obsługi w komponencie w następujący sposób:Następnie użyjesz kombinacji stanów / właściwości, aby przekazać zmieniony stan lub właściwości swoim podrzędnym komponentom React.
źródło
onMouseEnter
onMouseLeave
są zdarzenia DOM. Nie będą działać na niestandardowychReactComponent
, będziesz musiał przekazać wydarzenia jako rekwizyt i powiązać je z elementem DOM w taki sposóbReactComponent
, jak<div onMouseOver={ () => this.props.onMouseOver }>
ReactJs definiuje następujące zdarzenia syntetyczne dla zdarzeń myszy:
Jak widać, nie ma zdarzenia najechania kursorem, ponieważ przeglądarki nie definiują zdarzenia najechania natywnie.
Będziesz chciał dodać programy obsługi dla onMouseEnter i onMouseLeave dla zachowania po najechaniu.
ReactJS Docs - Wydarzenia
źródło
Wiem Zaakceptowanych odpowiedź jest wielki, ale dla każdego, kto szuka dla zawisu jak dotyk można wykorzystać
setTimeout
namouseover
i zapisać uchwyt w mapie (od powiedzmy lista identyfikatorów setTimeout handle). Namouseover
wyczyścić uchwyt z setTimeout i usunąć go z mapyI zaimplementuj mapę w następujący sposób:
Mapa jest taka,
Wolę
onMouseOver
ionMouseOut
ponieważ dotyczy to również wszystkich dzieci wHTMLElement
. Jeśli nie jest to wymagane, możesz użyć odpowiednioonMouseEnter
ionMouseLeave
.źródło
Aby uzyskać efekt najechania, możesz po prostu wypróbować ten kod
Lub jeśli chcesz poradzić sobie z tą sytuacją za pomocą hooka useState (), możesz wypróbować ten fragment kodu
Oba powyższy kod będzie działał z efektem najechania, ale pierwsza procedura jest łatwiejsza do napisania i zrozumienia
źródło