<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3" -->

---
title: Your useMemo Probably Isn't Doing Anything | daily.dev
description: React re-renders are widely misunderstood, leading developers to overuse useMemo and React.memo without real benefit. Only three things trigger a re-render:...
canonical: https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Your useMemo Probably Isn't Doing Anything | daily.dev
og:description: React re-renders are widely misunderstood, leading developers to overuse useMemo and React.memo without real benefit. Only three things trigger a re-render:...
og:url: https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3
og:image: https://api.daily.dev/og/posts/prlClJAV3.png
og:image:alt: Your useMemo Probably Isn't Doing Anything
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.

# Your useMemo Probably Isn't Doing Anything

**[The T-Shaped Dev](https://daily.dev/sources/thetshaped-dev)** · 10 min read · 15 upvotes · 4 comments

## Summary

React re-renders are widely misunderstood, leading developers to overuse useMemo and React.memo without real benefit. Only three things trigger a re-render: own state changes, context changes, or a parent passing a new element — props alone do not. Most re-renders are cheap function calls that rarely touch the DOM. The recommended fix order is: move state down, pass children as children (composition), stabilize references, then useMemo/useCallback, and finally React.memo as a last resort. The React Compiler (stable since Oct 2025) automates memoization but cannot restructure your component tree. Measure with DevTools Profiler before optimizing, and avoid dev-mode numbers since StrictMode renders twice intentionally.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://thetshaped.dev/p/react-rendering-demystified-your-usememo-probably-isnt-doing-anything>

## Questions this post answers

### Do changing props actually cause a React component to re-render?

No, props changing does not by itself trigger a re-render. Only three things trigger a render: a component's own state changing, a context value it reads changing, or its parent re-rendering and handing it a new element. Props only matter once a component is wrapped in React.memo, which compares props to decide whether to skip a render.

_Developers debugging unnecessary re-renders can find deeper React rendering explanations curated on daily.dev._

### Does React.memo stop a component from re-rendering when its own state changes?

No, React.memo cannot stop a component from re-rendering due to its own state changes or a context value it reads changing. Memo only compares props received from the parent; it has no effect on the other two render triggers. This is why a memoized component can still re-render even when someone insists memo isn't working.

_Anyone debugging a memo that seems broken can track detailed React internals discussions on daily.dev._

### Does useDeferredValue in React actually make a slow render faster?

No, useDeferredValue does not speed up the render itself; it prevents the heavy render from blocking the keystroke, letting the input update immediately while the expensive list catches up shortly after. React's documentation notes this only works if the slow child component is wrapped in memo, otherwise there is no render to skip and nothing is gained.

_Developers weighing useDeferredValue against memoization can compare React performance techniques on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@andruhudz** · 1 upvotes

> btw "New **React Compiler** automatically memoizes values and functions, making manual `useCallback` and `useMemo` wrappers unnecessary"

**@yaireo** · 1 upvotes

> It for sure does something. What you mean by "isn't doing anything" is probably "not making any (impactful) performance difference"

**@kbbdy** · 0 upvotes

> It makes your code look more professional and senior-developer grade. Not like all these "onClick=(ev)=>{....}", and the code then goes through code-review easily ;-)

## 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
- [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
- [React Basics: Memoization in React](https://daily.dev/posts/react-basics-memoization-in-react-ptipunthh) · Telerik · 2 upvotes · 0 comments
- [Why React.memo Doesn’t Fix Most Performance Problems \(And What Senior Engineers Do Instead\)](https://daily.dev/posts/why-react-memo-doesn-t-fix-most-performance-problems-and-what-senior-engineers-do-instead--xcasdkwfu) · Medium · 22 upvotes · 4 comments
- [React 20: New Compiler and useMemo Changes](https://daily.dev/posts/react-20-new-compiler-and-usememo-changes-7ghtygc1e) · SitePoint · 4 upvotes · 0 comments

---

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

[View this post on daily.dev](https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3)

```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":"Your useMemo Probably Isn't Doing Anything","url":"https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3"},"datePublished":"2026-07-28T06:15:55.667Z","dateModified":"2026-09-13T19:29:35.388Z","description":"React re-renders are widely misunderstood, leading developers to overuse useMemo and React.memo without real benefit. Only three things trigger a re-render:...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c3b2680a6d4e295f2e5cbc3090c645a2?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/c3b2680a6d4e295f2e5cbc3090c645a2?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"The T-Shaped Dev","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":"The T-Shaped Dev","logo":"https://media.daily.dev/image/upload/s--TaOz2Ogr--/f_auto,q_auto/v1774964066/logos/thetshaped-dev?_a=BAMAMiWQ0","url":"https://daily.dev/sources/thetshaped-dev"},"commentCount":4,"discussionUrl":"https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":15},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":4}],"keywords":"react,performance","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"The T-Shaped Dev","item":"https://daily.dev/sources/thetshaped-dev"},{"@type":"ListItem","position":3,"name":"Your useMemo Probably Isn't Doing Anything"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3","comment":[{"@type":"Comment","text":"btw “New React Compiler automatically memoizes values and functions, making manual useCallback and useMemo wrappers unnecessary”","datePublished":"2026-08-02T13:33:56.148Z","url":"https://daily.dev/posts/prlClJAV3#c-JhmVovY0d","author":{"@type":"Person","name":"andru hudz","url":"https://daily.dev/andruhudz","image":"https://lh3.googleusercontent.com/a/ACg8ocL---snYLZfyby0hGSZRNE0HBZxFUaV8F3aRsSy8J8sc6V6Ew=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"It for sure does something. What you mean by “isn’t doing anything” is probably “not making any (impactful) performance difference”","datePublished":"2026-07-28T08:56:17.083Z","url":"https://daily.dev/posts/prlClJAV3#c-y1n6IshUR","author":{"@type":"Person","name":"Yair Even Or","url":"https://daily.dev/yaireo","image":"https://avatars.githubusercontent.com/u/845031?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1}},{"@type":"Comment","text":"It makes your code look more professional and senior-developer grade. Not like all these “onClick=(ev)=&gt;{…}”, and the code then goes through code-review easily ;-)","datePublished":"2026-07-29T08:04:44.507Z","url":"https://daily.dev/posts/prlClJAV3#c-PfbQ307DJ","author":{"@type":"Person","name":"Krzysztof","url":"https://daily.dev/kbbdy","image":"https://avatars.githubusercontent.com/u/5362794?v=4"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/your-usememo-probably-isn-t-doing-anything-prlcljav3#faq","mainEntity":[{"@type":"Question","name":"Do changing props actually cause a React component to re-render?","acceptedAnswer":{"@type":"Answer","text":"No, props changing does not by itself trigger a re-render. Only three things trigger a render: a component's own state changing, a context value it reads changing, or its parent re-rendering and handing it a new element. Props only matter once a component is wrapped in React.memo, which compares props to decide whether to skip a render. Developers debugging unnecessary re-renders can find deeper React rendering explanations curated on daily.dev."}},{"@type":"Question","name":"Does React.memo stop a component from re-rendering when its own state changes?","acceptedAnswer":{"@type":"Answer","text":"No, React.memo cannot stop a component from re-rendering due to its own state changes or a context value it reads changing. Memo only compares props received from the parent; it has no effect on the other two render triggers. This is why a memoized component can still re-render even when someone insists memo isn't working. Anyone debugging a memo that seems broken can track detailed React internals discussions on daily.dev."}},{"@type":"Question","name":"Does useDeferredValue in React actually make a slow render faster?","acceptedAnswer":{"@type":"Answer","text":"No, useDeferredValue does not speed up the render itself; it prevents the heavy render from blocking the keystroke, letting the input update immediately while the expensive list catches up shortly after. React's documentation notes this only works if the slow child component is wrapped in memo, otherwise there is no render to skip and nothing is gained. Developers weighing useDeferredValue against memoization can compare React performance techniques on daily.dev."}}]}
```

