React Js

React JS Tutorial Learn React JS, the powerful JavaScript library for building dynamic and interactive user interfaces. This beginner-friendly tutorial covers core concepts like components, state, props, and hooks, with hands-on projects to create responsive web apps. Perfect for aspiring developers looking to master modern front-end development.

React useMemo Hook

25 April 2025 | Category:

What is useMemo?

useMemo is a React Hook that memoizes a calculated value so it’s only recomputed when necessary.

In plain English:

useMemo helps you avoid recalculating expensive values every time your component re-renders.


📦 Why use useMemo?

You should use useMemo when:

âś… You have a heavy/expensive calculation
âś… You want to avoid unnecessary recalculations
âś… You need to memoize derived data
âś… You want to improve performance in large apps


đź”§ Syntax

const memoizedValue = useMemo(() => {
  return computeExpensiveValue(a, b);
}, [a, b]);
  • Runs the function only when dependencies (a or b) change
  • Returns the cached result if dependencies haven’t changed

📌 Analogy

Let’s say you solve a hard math problem and write down the answer. If the input values don’t change, you don’t want to solve it again — you just look at your saved answer. That’s what useMemo does for your code!


âś… Example 1: Expensive Calculation

import React, { useState, useMemo } from 'react';

function ExpensiveComponent() {
  const [count, setCount] = useState(0);
  const [input, setInput] = useState('');

  const expensiveCalculation = (num) => {
    console.log('Calculating...');
    for (let i = 0; i < 1000000000; i++) {} // heavy loop
    return num * 2;
  };

  const calculatedValue = useMemo(() => expensiveCalculation(count), [count]);

  return (
    <div>
      <h2>Expensive Calculation</h2>
      <p>Result: {calculatedValue}</p>
      <button onClick={() => setCount(count + 1)}>Increment Count</button>
      <input value={input} onChange={(e) => setInput(e.target.value)} />
    </div>
  );
}

🔍 Explanation:

  • The expensive calculation only runs when count changes
  • Typing in the input doesn’t cause recalculation – because of useMemo

âś… Example 2: Filtered List

import React, { useState, useMemo } from 'react';

const items = ['apple', 'banana', 'orange', 'grape', 'mango'];

function FilteredList() {
  const [query, setQuery] = useState('');

  const filteredItems = useMemo(() => {
    return items.filter(item => item.toLowerCase().includes(query.toLowerCase()));
  }, [query]);

  return (
    <div>
      <h2>Fruit Filter</h2>
      <input
        placeholder="Search fruits"
        value={query}
        onChange={(e) => setQuery(e.target.value)}
      />
      <ul>
        {filteredItems.map(item => (
          <li key={item}>{item}</li>
        ))}
      </ul>
    </div>
  );
}

đź’ˇ Without useMemo, this filter logic would run every time the component re-renders.


🔄 useMemo vs useCallback

HookPurpose
useMemoMemoizes a value
useCallbackMemoizes a function

đź“‹ Summary

ConceptDescription
useMemoMemoizes a return value
RecalculatesOnly when dependencies change
Best forExpensive calculations, derived data
Not forSide effects (use useEffect instead)

⚠️ Common Mistakes

❌ Using useMemo for every value (only use it for costly logic)
❌ Forgetting to add dependencies
❌ Using it for side-effects (use useEffect instead)


🔥 Real World Use Cases

  • Calculating totals in shopping cart apps
  • Filtering large lists
  • Generating dynamic chart data
  • Deriving values from props or state