惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
U
Unit 42
Y
Y Combinator Blog
I
InfoQ
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
量子位
Microsoft Security Blog
Microsoft Security Blog
B
Blog
The Cloudflare Blog
F
Fortinet All Blogs
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
C
Check Point Blog
S
SegmentFault 最新的问题
爱范儿
爱范儿
博客园 - 叶小钗
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Hugging Face - Blog
Hugging Face - Blog
罗磊的独立博客
T
Tailwind CSS Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Your React App Isn’t Slow — You’re Just Looking in the Wr...
Gyan Shresth · 2026-05-01 · via DEV Community

Most slow React apps share the same hidden issues — and none of them are React itself.

When a React app starts feeling sluggish, the first instinct is to blame React. Spoiler: it's almost never React.


🧠 React is not slow by default

React is actually very fast at what it does:

  • It batches updates
  • It uses a virtual DOM
  • It only touches the real DOM when necessary

So if your app feels slow, React is usually just doing extra work because we told it to.


⚠️ The real reason apps feel slow

Most performance issues come from unnecessary re-renders and heavy work inside renders.

Let's break down the common causes.


🔁 1. Unnecessary re-renders

Every time state changes, React re-runs components — even ones that don't depend on that state.

function App() {
  const [count, setCount] = React.useState(0);

  return (
    <div>
      <Header />          {/* re-renders even though it doesn't use count */}
      <HeavyComponent />  {/* same here */}
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

Enter fullscreen mode Exit fullscreen mode

👉 This becomes expensive as components grow.


🧮 2. Expensive calculations inside render

function App({ items }) {
  const sortedItems = items.sort((a, b) => b - a); // runs on EVERY render

  return <List items={sortedItems} />;
}

Enter fullscreen mode Exit fullscreen mode

Sorting runs on every render — even if items didn't change. This slows down your app silently.


🔄 3. Creating new objects/functions every render

{/* New function reference created on every render */}
<Child onClick={() => doSomething()} />

{/* New object reference created on every render */}
<Child style={{ color: "red" }} />

Enter fullscreen mode Exit fullscreen mode

React sees these as new props every time, causing unnecessary child re-renders.


🧱 4. Render chain reactions

If a parent updates, children often re-render too — unless you've optimized them. This creates a cascade that's hard to debug.


📍 5. Poor state placement

function App() {
  const [theme, setTheme] = useState("dark");

  return (
    <div>
      <Header theme={theme} />
      <Dashboard />  {/* doesn't care about theme */}
      <Settings />   {/* doesn't care about theme */}
    </div>
  );
}

Enter fullscreen mode Exit fullscreen mode

Every theme change re-renders the entire app — including components that don't need it.


🚀 So is React the problem?

No.

React is just following your instructions. Most performance issues come from:

  • Poor state placement
  • Unnecessary work in render
  • Missing memoization
  • Creating new references on every render

⚡ How to actually fix it

1. Keep state local

Don't lift state unless you absolutely have to. Local state = local re-renders.


2. Use React.memo for heavy components

const HeavyComponent = React.memo(function HeavyComponent() {
  return <div>Heavy UI</div>;
});

Enter fullscreen mode Exit fullscreen mode

Skips re-rendering when props haven't changed.


3. Memoize expensive calculations with useMemo

const sortedItems = React.useMemo(() => {
  return items.sort((a, b) => b - a);
}, [items]);

Enter fullscreen mode Exit fullscreen mode

Now the sort only runs when items actually changes.


4. Stabilize functions with useCallback

const handleClick = React.useCallback(() => {
  doSomething();
}, []);

Enter fullscreen mode Exit fullscreen mode

Preserves the function reference across renders so children don't update unnecessarily.


5. Keep render pure

Render should output only UI. Not:

  • ❌ Sorting
  • ❌ Filtering
  • ❌ Heavy computation
  • ❌ API data transformation

🧠 The mental model that helps

Think of React like this:

UI = f(state + props)

Enter fullscreen mode Exit fullscreen mode

React is a calculator. If it feels slow, it's not the calculator — it's the complexity of what you're asking it to calculate.


✅ Before you profile, ask yourself

  • Am I re-rendering components that don't need to update?
  • Am I doing heavy work inside render?
  • Is my state placed too high in the tree?
  • Am I creating new object or function references on every render?

Fix these, and your React app will feel extremely fast.


🎯 Final thoughts

The difference between writing React code and writing efficient UI systems is understanding exactly this.

Once you do — things get fun.


Found this useful? Drop a ❤️ and share it with someone still blaming React for their slow app.