Skip to content

useMemoizedCallback ​

A React hook that returns a memoized callback which only updates when deep dependencies change, ensuring stable function references for complex dependency arrays.

Overview ​

useMemoizedCallback is useful when your callback depends on objects or arrays that may be recreated frequently. By using deep equality checks, it prevents unnecessary callback recreation and helps maintain optimal performance in memoized components and hooks.

Import ​

tsx
import { useMemoizedCallback } from "react-performify";

Example ​

tsx
import React, { useState } from "react";
import { useMemoizedCallback } from "react-performify";

function FilterButton({ filter }) {
  const handleClick = useMemoizedCallback(() => {
    alert(`Filter: ${JSON.stringify(filter)}`);
  }, [filter]);

  return <button onClick={handleClick}>Show Filter</button>;
}

// Usage
function App() {
  const [filter, setFilter] = useState({ limit: 10, sort: "asc" });
  return <FilterButton filter={filter} />;
}

API Reference ​

ParameterTypeDescription
callbackFunctionThe callback to memoize.
depsany[]Deep dependency array.

Returns: Memoized callback.

Implementation ​

tsx
import { useCallback, useRef } from "react";
import isEqual from "fast-deep-equal";

export function useMemoizedCallback<T extends (...args: any[]) => any>(
    callback: T,
    deps: any[]
): T {
    const lastDeps = useRef<any[]>([]);
    const lastCallback = useRef<T>(callback);

    if (!isEqual(deps, lastDeps.current)) {
        lastDeps.current = deps;
        lastCallback.current = callback;
    }

    return useCallback(
        ((...args: any[]) => lastCallback.current(...args)) as T,
        []
    );
}

Notes ​

  • Uses deep equality for dependencies.
  • Prevents unnecessary callback recreation.
  • Ideal for stable event handlers and memoized props.

Type Definition ​

tsx
function useMemoizedCallback<T extends (...args: any[]) => any>(
    callback: T,
    deps: any[]
): T

Summary ​

Memoize callbacks with deep dependency checks to ensure stable references and efficient rendering in React.