@carbon/react
Version:
React components for the Carbon Design System
27 lines (23 loc) • 839 B
JavaScript
/**
* Copyright IBM Corp. 2016, 2023
*
* 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, useCallback } from 'react';
/**
* Returns a stable callback reference that always points to the latest version
* of a callback. This is useful when you want to avoid including the callback
* in dependency arrays while still ensuring the latest callback implementation
* is used.
*
* @param callback - The callback to track.
*/
const useSavedCallback = callback => {
const savedCallback = useRef(callback);
useEffect(() => {
savedCallback.current = callback;
}, [callback]);
return useCallback((...args) => savedCallback.current ? savedCallback.current(...args) : undefined, []);
};
export { useSavedCallback };