Prevents unnecessary re-renders of function components when props
haven’t changed (shallow comparison).
import { memo } from 'react';
const Child = memo(({ obj, onClick }: { obj: { a: number }, onClick: () => void }) => {
console.log('Child rendered');
return (
<>
<p>{obj.a}</p>
<button onClick={onClick}>Click</button>
</>
);
});
Usage:
Note on props:
string
, number
, boolean
).useMemo()
/ useCallback()
:import { useMemo, useCallback } from 'react';
function Parent() {
const memoizedObj = useMemo(() => ({ a: 1 }), []);
const memoizedFn = useCallback(() => {
console.log('clicked');
}, []);
return <Child obj={memoizedObj} onClick={memoizedFn} />;
}
Avoid using memo()
if: