Skip to content

useEventCallback ​

A React hook that returns a stable event callback reference, always calling the latest version of the provided function.


✨ Overview ​

useEventCallback ensures the callback identity remains constant between renders while always calling the latest version of the provided function.
Useful for event listeners or child components to avoid unnecessary re-renders.


📦 Import ​

tsx
import { useEventCallback } from 'react-hookstack';

🚀 Usage Example ​

tsx
import { useEventCallback } from 'react-hookstack';

const handleClick = useEventCallback(() => {
  console.log("Button clicked!");
});

<button onClick={handleClick}>Click Me</button>

🧩 API Reference ​

useEventCallback<T extends (...args: any[]) => any>(fn: T): (...args: Parameters<T>) => ReturnType<T>

Parameters ​

ParameterTypeDescription
fn(...args: any[]) => anyThe callback function to stabilize.

Returns ​

TypeDescription
(...args: Parameters<T>) => ReturnType<T>Stable callback that calls the latest fn.

⚙️ Implementation ​

tsx
import { useRef, useCallback } from "react";

export function useEventCallback<T extends (...args: any[]) => any>(
    fn: T
): (...args: Parameters<T>) => ReturnType<T> {
    const ref = useRef(fn);
    ref.current = fn;
    return useCallback((...args: Parameters<T>) => {
        return ref.current(...args);
    }, []);
}

💡 Notes ​

  • The returned callback reference is stable.
  • Always calls the latest version of the function.

🧾 Type Definition ​

tsx
function useEventCallback<T extends (...args: any[]) => any>(
  fn: T
): (...args: Parameters<T>) => ReturnType<T>;

🧭 Summary ​

FeatureDescription
🧱 Stable refPrevents unnecessary re-renders
⚡ LightweightNo dependencies
🧠 IntuitiveSimple API surface