
useMemo
What is Memoization?
Background
The term “Memoization” came from the Latin word “memorandum” (to remember), which is shortened to “memo” in American English which means “to transform the results of a function into something to remember.”.
Memoization
In computing term, memoization is refered to speed up computer programs by eliminating the repetitive computation of results, and by avoiding repeated method calls that process the same input.
useMemo
In the context of programming, particularly in React.js, `useMemo` is a hook used for memoizing expensive computations so that they are only re-executed when one of the dependencies has changed.
In React, when a component re-renders, all of its code is executed again, including any expensive computations. This can be inefficient if those computations don’t need to be recalculated on every render.
`useMemo` allows you to optimize performance by memoizing the result of a function or computation and only recalculating it when the inputs to that function change. It takes two arguments: the first is a function that performs the computation, and the second is an array of dependencies. The result of the computation is memoized and will only be recalculated when one of the dependencies changes.
Here’s a basic example:
import React, { useMemo } from ‘react’;
const MyComponent = ({ a, b }) => {
const result = useMemo(() => {
// Expensive computation
return a * b;
}, [a, b]); // Recalculate result only if ‘a’ or ‘b’ changes
return <div>{result}</div>;
};
export default MyComponent;
In this example, the multiplication of `a` and `b` is an expensive computation. By using `useMemo`, we ensure that the multiplication is only performed again if either `a` or `b` changes. This can lead to significant performance improvements in components with complex computations.
React’s functional component uses the useMemo hook, which yields a memoized value.

Syntex
useMemo() is a built-in React hook that accepts two arguments — a function compute that computes a result, and the depedencies array

react.memo
react.memo is used in higher-order component that is used to memoize a component, which means it caches the output of the component and only re-renders it if its props have changed. This can be useful when a component’s rendering is expensive, and you want to avoid unnecessary re-renders. Memo can be imported from ‘react’ and wrapped around a functional component.
useMemo vs useCallback
The useMemo and useCallback Hooks are similar. The main difference is that useMemo returns a memoized value and useCallback returns a memoized function


What problem solved in useMemo ?
Improve Application Performance
How to implement Memoization concept in class component ?
Using PureComponent
Does useMemo have any disadvantage?
Yes we can’t call useMemo in loop like

Resolution

YouTube Video
Top 10 useMemo Interview Questions and Answers
1. What is useMemo in React?
useMemo is a React Hook that memoizes the result of a function, ensuring that it only recomputes when dependencies change. This helps optimize performance by preventing unnecessary calculations.
Example:
import { useMemo, useState } from "react";
function ExpensiveCalculation({ num }) {
const squared = useMemo(() => {
console.log("Computing...");
return num * num;
}, [num]);
return <p>Squared Value: {squared}</p>;
}
Key Benefit: Avoids recalculating num * num unless num changes.
2. When should you use useMemo?
Use useMemo in the following scenarios:
✅ Expensive Computations: If a function performs complex calculations.
✅ Referential Equality Issues: To prevent unnecessary renders in child components.
✅ Avoiding Recalculations in Rendering: When data transformation is computationally heavy.
🔴 Avoid useMemo when:
❌ The computation is fast.
❌ You don’t have performance issues.
3. What happens if we use useMemo incorrectly?
If useMemo is misused:
- Memory Overhead: Storing unnecessary cached values.
- Unnecessary Complexity: Using
useMemofor simple calculations. - No Performance Improvement: If dependencies change frequently, recomputation happens anyway.
Bad Example (Overuse of useMemo):
const name = useMemo(() => "Akshay", []); // ❌ No need to memoize a static value
👉 In this case, useMemo is redundant.
4. Can useMemo be used with API calls?
No, useMemo should not be used for API calls because:
useMemoruns during rendering (not after).- API calls should be handled using
useEffectinstead.
✅ Use useEffect instead:
useEffect(() => {
fetchData();
}, []);
5. What is the difference between useMemo and useCallback?
| Feature | useMemo | useCallback |
|---|---|---|
| Purpose | Memoizes return value | Memoizes function reference |
| Returns | Computed value | A memoized function |
| Used for | Optimizing expensive calculations | Avoiding function re-creations |
| Example | const result = useMemo(...); | const callback = useCallback(...); |
useMemo vs useCallback🚀 Rule of Thumb:
- Use
useMemowhen caching values. - Use
useCallbackwhen caching functions.
6. Does useMemo guarantee that the function won’t run on every render?
No. If dependencies change, useMemo will recompute the value. However, it ensures that unnecessary calculations are avoided when dependencies don’t change.
Example:
const value = useMemo(() => expensiveFunction(), [count]); // Recomputes only if count changes
7. How does useMemo help in optimizing child components?
When passing derived values to child components, using useMemo ensures the value doesn’t unnecessarily change, preventing unwanted re-renders.
Example:
const memoizedValue = useMemo(() => computeExpensiveValue(input), [input]);
<ChildComponent value={memoizedValue} />;
✅ This helps avoid unnecessary re-renders of <ChildComponent>.
8. How does useMemo help in handling large lists efficiently?
For large lists, useMemo helps optimize data processing.
🔹 Without useMemo (Re-renders on every state change)
const filteredItems = items.filter(item => item.includes(searchTerm));
🔹 With useMemo (Caches results unless items or searchTerm change)
const filteredItems = useMemo(() => {
return items.filter(item => item.includes(searchTerm));
}, [items, searchTerm]);
🚀 Faster rendering, better performance!
9. What are some real-world use cases of useMemo?
✅ Optimizing Computation-Heavy Functions (e.g., sorting, filtering, large dataset calculations)
✅ Ensuring Referential Equality (e.g., avoiding unnecessary renders in React.memo components)
✅ Reducing Recomputations in Forms (e.g., validation checks)
✅ Optimizing Redux Selectors (memoizing computed state values)
10. How does useMemo compare with React’s built-in optimizations?
useMemoprevents unnecessary recomputation within a component.React.memoprevents unnecessary re-renders of child components.- Best practice: Use
React.memowithuseMemofor better performance.
🔹 Example of using both:
const memoizedValue = useMemo(() => computeHeavyTask(), [dependency]);
const MemoizedChild = React.memo(ChildComponent);
<MemoizedChild value={memoizedValue} />;
🚀 Boosts performance significantly!
Final Thoughts 💡
Using useMemo correctly can significantly optimize React applications, but overusing it can lead to unnecessary complexity. Follow best practices:
✅ Use it only for performance-critical computations.
✅ Avoid using it for simple values.
✅ Combine it with React.memo for better rendering optimizations.
Read other awesome articles in Medium.com or in akcoding’s posts.
OR
Join us on YouTube Channel
OR Scan the QR Code to Directly open the Channel 👉




