@carbon/ibm-products
Version:
Carbon for IBM Products
33 lines (29 loc) • 848 B
JavaScript
/**
* Copyright IBM Corp. 2020, 2025
*
* This source code is licensed under the Apache-2.0 license found in the
* LICENSE file in the root directory of this source tree.
*/
import { useRef, useEffect } from 'react';
const useEvent = (elementOrRef, eventName, callback) => {
const savedCallback = useRef(null);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
useEffect(() => {
const element = 'current' in elementOrRef ? elementOrRef.current : elementOrRef;
if (!element) {
return;
}
const handler = event => {
if (savedCallback.current) {
savedCallback.current(event);
}
};
element.addEventListener(eventName, handler);
return () => {
element.removeEventListener(eventName, handler);
};
}, [elementOrRef, eventName]);
};
export { useEvent };