React — useMemo
Basic useMemo
import { useMemo } from 'react';
function ExpensiveComponent({ items }) {
const sortedItems = useMemo(() => {
return items.sort((a, b) => a - b);
}, [items]);
return (
<ul>
{sortedItems.map(item => (
<li key={item}>{item}</li>
))}
</ul>
);
}
useMemo for Expensive Calculations
function Fibonacci({ n }) {
const fibonacci = useMemo(() => {
const calc = (num) => {
if (num <= 1) return num;
return calc(num - 1) + calc(num - 2);
};
return calc(n);
}, [n]);
return <p>Fibonacci({n}) = {fibonacci}</p>;
}
useMemo vs useCallback
// useMemo - memoizes value
const memoizedValue = useMemo(() => computeValue(a, b), [a, b]);
// useCallback - memoizes function
const memoizedCallback = useCallback(() => {
doSomething(a, b);
}, [a, b]);
useMemo Examples
// Filtered list
function FilteredList({ items, filter }) {
const filteredItems = useMemo(() => {
return items.filter(item =>
item.name.toLowerCase().includes(filter.toLowerCase())
);
}, [items, filter]);
return (
<ul>
{filteredItems.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
}
// Expensive computation
function DataProcessor({ data }) {
const processedData = useMemo(() => {
console.log('Processing data...');
return data.map(item => ({
...item,
fullName: `${item.firstName} ${item.lastName}`,
age: new Date().getFullYear() - item.birthYear
}));
}, [data]);
return (
<ul>
{processedData.map(item => (
<li key={item.id}>
{item.fullName} - Age: {item.age}
</li>
))}
</ul>
);
}
// Sorted table
function SortedTable({ data, sortKey, sortOrder }) {
const sortedData = useMemo(() => {
return [...data].sort((a, b) => {
if (sortOrder === 'asc') {
return a[sortKey] > b[sortKey] ? 1 : -1;
}
return a[sortKey] < b[sortKey] ? 1 : -1;
});
}, [data, sortKey, sortOrder]);
return (
<table>
<tbody>
{sortedData.map(row => (
<tr key={row.id}>
<td>{row.name}</td>
<td>{row.value}</td>
</tr>
))}
</tbody>
</table>
);
}
Mini Practice
Write React code that:
- Uses useMemo for expensive calculations
- Memoizes filtered data
- Memoizes sorted data
- Compares useMemo vs useCallback
Up Next
Next: Learn about useCallback hook.
Related Topics
Frequently Asked Questions about useMemo
What is useMemo in React?
useMemo is a fundamental concept in React. This lesson explains it step by step with clear examples, making it easy for beginners to understand.
How do I learn useMemo?
Start by reading the explanation above, then try the code examples. Practice by modifying the examples and experimenting with different values. Hands-on practice is the best way to learn useMemo.
Why is useMemo important in React?
useMemo is essential for React development. Understanding this concept will help you write better code and solve real-world problems more effectively.