UNPKG

cloudhubui

Version:

Various components to use in react projects

45 lines (33 loc) 1.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = useEventListener; var _react = _interopRequireDefault(require("react")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // Hook function useEventListener(eventName, handler) { var element = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : window; // Create a ref that stores handler var savedHandler = _react.default.useRef(); // Update ref.current value if handler changes. // This allows our effect below to always get latest handler ... // ... without us needing to pass it in effect deps array ... // ... and potentially cause effect to re-run every render. _react.default.useEffect(function () { savedHandler.current = handler; }, [handler]); _react.default.useEffect(function () { // Make sure element supports addEventListener // On var isSupported = element && element.addEventListener; if (!isSupported) return; // Create event listener that calls handler function stored in ref var eventListener = function eventListener(event) { event.preventDefault(); }; // Add event listener element.addEventListener(eventName, eventListener); // Remove event listener on cleanup return function () { element.removeEventListener(eventName, eventListener); }; }, [eventName, element] // Re-run if eventName or element changes ); }