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)

This demo uses an embedded StackBlitz sandbox. Load it inline or open it in a new tab.

Open demo in StackBlitz

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