web-api-hooks
Version:
Essential set of React Hooks for convenient Web API consumption.
35 lines (34 loc) • 922 B
JavaScript
import { useState } from 'react';
/**
* Tracks hover state of an element.
*
* @param {boolean} disallowTouch Determines whether touch gestures should be ignored.
* @returns Whether the element is hovered, and props to be spread over the element under observation.
*
* @example
* function Component() {
* const [isHovered, bindHover] = useHover();
* // ...
* return <ElementToObserve {...bindHover} />;
* }
*/
export default function useHover(disallowTouch = false) {
const [isHovered, setHovered] = useState(false);
return [
isHovered,
{
onMouseEnter() {
setHovered(true);
},
onMouseLeave() {
setHovered(false);
},
onTouchStart() {
setHovered(!disallowTouch);
},
onTouchEnd() {
setHovered(false);
},
},
];
}