Memoization Hook: Memo()
This prevents unnecessary re-renders.
A child component will not be recreated if the props have not changed.
function Page() {
const [name, setName] = useState('Taylor');
const [age, setAge] = useState(42);
return <Profile name={name} age={age} />;
}
const Profile = memo(function Profile({ name, age }) {
// ...
});
Gotchyas
Don't pass in an object and then destructure - just send in what you need.
React does a shallow comparison - so the properties might be the same but the instance is different. This would cause an unnecessary render.
// Bad implementation that passes in an object.
function Page() {
const [name, setName] = useState('Taylor');
const [age, setAge] = useState(42);
const person = useMemo(
() => ({ name, age }),
[name, age]
);
return <Profile person={person} />;
}
const Profile = memo(function Profile({ person }) {
// ...
});