Skip to main content

useMemoProfiling

Description and use case​

useMemoProfiling wraps useMemo and records cache effectiveness. Use it to validate whether memoization actually improves performance.

API signature​

function useMemoProfiling<T>(factory: () => T, deps: DependencyList, label?: string): T;

function getStats(label?: string): MemoProfilingStats;

Parameters​

NameTypeRequiredDescription
factory() => TYesComputation callback, same as useMemo.
depsDependencyListYesDependency list controlling recomputation.
labelstringNoGrouping key for logs and accumulated stats.

Return value​

FieldTypeDescription
Hook returnTMemoized value produced by factory.
getStats(label)MemoProfilingStatsReturns cumulative hit/miss and recompute timing stats.

Live interactive demo (StackBlitz)​

GitHub Pages does not serve the isolation headers required for embedded StackBlitz WebContainers. Open the demo in StackBlitz to run it interactively.

Code example​

import { getStats, useMemoProfiling } from 'react-perf-hooks';

type Props = { items: string[]; query: string };

export function FilteredList({ items, query }: Props) {
const filtered = useMemoProfiling(
() => items.filter((item) => item.includes(query)),
[items, query],
'FilteredList',
);

const stats = getStats('FilteredList');

return (
<div>
<p>
Hits: {stats.hits} | Misses: {stats.misses}
</p>
{filtered.map((item) => (
<div key={item}>{item}</div>
))}
</div>
);
}

Companion article​