<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu" -->

---
title: Why React.memo Doesn’t Fix Most Performance Problems...
description: React.memo is widely misused as a catch-all performance fix, but it only skips renders when prop references stay stable. Inline functions, objects, arrays, and...
canonical: https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Why React.memo Doesn’t Fix Most Performance Problems (And What Senior Engineers Do Instead) | daily.dev
og:description: React.memo is widely misused as a catch-all performance fix, but it only skips renders when prop references stay stable. Inline functions, objects, arrays, and...
og:url: https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu
og:image: https://api.daily.dev/og/posts/XcAsdkWfU.png
og:image:alt: Why React.memo Doesn’t Fix Most Performance Problems (And What Senior Engineers Do Instead)
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Why React.memo Doesn’t Fix Most Performance Problems (And What Senior Engineers Do Instead)

**[Medium](https://daily.dev/sources/medium_js)** · 14 min read · 22 upvotes · 4 comments

## Summary

React.memo is widely misused as a catch-all performance fix, but it only skips renders when prop references stay stable. Inline functions, objects, arrays, and context values create new references on every render, defeating memoization entirely. The real causes of React performance problems are usually architectural: oversized parent components triggering cascading re-renders, expensive calculations running on every render, and rendering thousands of DOM elements users can't see. Senior engineers profile first with React DevTools, then address root causes — stabilizing references with useCallback/useMemo, splitting large components to localize state, memoizing expensive computations, and using virtualization (react-window) for large lists. The core principle: help React do less work rather than adding more optimization hooks.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://saujanpatel06.medium.com/why-react-memo-doesnt-fix-most-performance-problems-and-what-senior-engineers-do-instead-594262d5128f>

## Questions this post answers

### Why does my component still re-render even though I wrapped it with React.memo?

React.memo only performs a shallow comparison of props, checking reference equality rather than content equality. Inline functions, objects, and arrays created fresh on every parent render produce new references each time, so React.memo sees them as changed props and re-renders the child even when the underlying values are identical. Stabilizing references with useCallback or useMemo fixes this.

_Developers debugging unexpected re-renders can find deeper React performance explainers on daily.dev._

### Why does wrapping a context value in an object cause all consumers to re-render?

Every render of a context provider creates a brand-new object for the value prop, and since React compares references not contents, every component consuming that context is notified of an update even when the underlying data like user or logout hasn't changed. Memoizing the context value with useMemo, keyed on its actual dependencies, prevents unnecessary re-renders across all consumers.

_Anyone architecting React context providers can track patterns like this on daily.dev._

### Should I use virtualization or React.memo for rendering large lists like 10,000 items?

Virtualization, using libraries like react-window or react-virtualized, is more effective than memoization for large lists because it renders only the roughly 20-30 visible rows instead of all 10,000, avoiding the cost of creating, reconciling, and painting thousands of DOM elements. Memoizing each item still leaves React doing that reconciliation work for every element.

_Teams choosing between memoization and virtualization for data-heavy UIs can compare approaches on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@taiwofrancis** · 0 upvotes

> The React DevTools Profiler never lies

**@yaireo** · 0 upvotes

> This article belongs to an old age before React _Compiler_.
>
> You don't need to even think about these things anymore.

**@trevorsuna** · 0 upvotes

> Profiling first is the key point. React.memo can reduce a symptom, but moving state closer to where it is used or virtualizing a large list usually removes the work entirely, which is a much more durable fix.

## Similar posts on daily.dev

- [Why Your React App Re-renders Too Much \(And How to Fix It\)](https://daily.dev/posts/why-your-react-app-re-renders-too-much-and-how-to-fix-it--6tepumtep) · Medium · 4 upvotes · 0 comments
- [Your useMemo Probably Isn't Doing Anything](https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3) · The T-Shaped Dev · 15 upvotes · 4 comments
- [React Basics: Memoization in React](https://daily.dev/posts/react-basics-memoization-in-react-ptipunthh) · Telerik · 2 upvotes · 0 comments
- [How to Avoid Overusing useCallback and useMemo in React](https://daily.dev/posts/how-to-avoid-overusing-usecallback-and-usememo-in-react-sjjyd2g8d) · freeCodeCamp · 11 upvotes · 0 comments
- [Medium](https://daily.dev/posts/medium-tgs0gckgz) · Medium · 6 upvotes · 0 comments

---

Tags: [#react](https://daily.dev/tags/react), [#performance](https://daily.dev/tags/performance), [#infrastructure](https://daily.dev/tags/infrastructure)

[View this post on daily.dev](https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Why React.memo Doesn’t Fix Most Performance Problems (And What Senior Engineers Do Instead)","url":"https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu"},"datePublished":"2026-08-02T00:15:14.925Z","dateModified":"2026-09-13T19:29:51.401Z","description":"React.memo is widely misused as a catch-all performance fix, but it only skips renders when prop references stay stable. Inline functions, objects, arrays, and...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6ab0a9a223ee01bc82d647f54feb2d2?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6ab0a9a223ee01bc82d647f54feb2d2?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":4,"discussionUrl":"https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":22},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":4}],"keywords":"react,performance,infrastructure","timeRequired":"PT14M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"Why React.memo Doesn’t Fix Most Performance Problems (And What Senior Engineers Do Instead)"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu","comment":[{"@type":"Comment","text":"The React DevTools Profiler never lies","datePublished":"2026-08-02T13:23:54.445Z","url":"https://daily.dev/posts/XcAsdkWfU#c-BcQkShCd7","author":{"@type":"Person","name":"Taiwo Francis Oguntade","url":"https://daily.dev/taiwofrancis","image":"https://media.daily.dev/image/upload/s--px3_Pvo4--/f_auto/v1785515368/avatars/avatar_FStpm3ZejUD3qGlEeoOUS?_a=BAMAMicg0"}},{"@type":"Comment","text":"This article belongs to an old age before React Compiler.\nYou don’t need to even think about these things anymore.","datePublished":"2026-08-02T06:33:54.584Z","url":"https://daily.dev/posts/XcAsdkWfU#c-My1jLwBg9","author":{"@type":"Person","name":"Yair Even Or","url":"https://daily.dev/yaireo","image":"https://avatars.githubusercontent.com/u/845031?v=4"}},{"@type":"Comment","text":"Profiling first is the key point. React.memo can reduce a symptom, but moving state closer to where it is used or virtualizing a large list usually removes the work entirely, which is a much more durable fix.","datePublished":"2026-08-02T04:08:50.652Z","url":"https://daily.dev/posts/XcAsdkWfU#c-STQQH4d6k","author":{"@type":"Person","name":"Trevor Suna","url":"https://daily.dev/trevorsuna","image":"https://media.daily.dev/image/upload/s--dZ7gXxpp--/f_auto/v1784081551/avatars/avatar_EMoP47rpuw8DNjhp6R1b6?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu#faq","mainEntity":[{"@type":"Question","name":"Why does my component still re-render even though I wrapped it with React.memo?","acceptedAnswer":{"@type":"Answer","text":"React.memo only performs a shallow comparison of props, checking reference equality rather than content equality. Inline functions, objects, and arrays created fresh on every parent render produce new references each time, so React.memo sees them as changed props and re-renders the child even when the underlying values are identical. Stabilizing references with useCallback or useMemo fixes this. Developers debugging unexpected re-renders can find deeper React performance explainers on daily.dev."}},{"@type":"Question","name":"Why does wrapping a context value in an object cause all consumers to re-render?","acceptedAnswer":{"@type":"Answer","text":"Every render of a context provider creates a brand-new object for the value prop, and since React compares references not contents, every component consuming that context is notified of an update even when the underlying data like user or logout hasn't changed. Memoizing the context value with useMemo, keyed on its actual dependencies, prevents unnecessary re-renders across all consumers. Anyone architecting React context providers can track patterns like this on daily.dev."}},{"@type":"Question","name":"Should I use virtualization or React.memo for rendering large lists like 10,000 items?","acceptedAnswer":{"@type":"Answer","text":"Virtualization, using libraries like react-window or react-virtualized, is more effective than memoization for large lists because it renders only the roughly 20-30 visible rows instead of all 10,000, avoiding the cost of creating, reconciling, and painting thousands of DOM elements. Memoizing each item still leaves React doing that reconciliation work for every element. Teams choosing between memoization and virtualization for data-heavy UIs can compare approaches on daily.dev."}}]}
```

