React apps are powerful β but performance bottlenecks appear when components re-render unnecessarily or when state is managed poorly.
Hereβs a simple guide to help you optimize your React apps for speed and efficiency.
1οΈβ£ Minimize Re-renders with React.memo
React re-renders components whenever props/state change β even if not required.
π Solution: Wrap components in React.memo
.
import React, { memo } from "react";
const ExpensiveComponent = memo(({ data }) => {
console.log("Rendered!");
return <div>{data}</div>;
});
export default ExpensiveComponent;
β
Now it only re-renders when data
changes.
2οΈβ£ Optimize Functions with useCallback
Each render creates new function references, causing child components to re-render.
π Wrap event handlers in useCallback
.
import { useState, useCallback } from "react";
const Parent = () => {
const [count, setCount] = useState(0);
const handleClick = useCallback(() => setCount(count + 1), [count]);
return <Child onClick={handleClick} />;
};
const Child = memo(({ onClick }) => (
<button onClick={onClick}>Click</button>
));
β
Prevents unnecessary renders of Child
.
3οΈβ£ Use useMemo
for Expensive Computations
Avoid recalculating values that donβt change often.
π Use useMemo
.
import { useMemo } from "react";
const ExpensiveComponent = ({ data }) => {
const computedValue = useMemo(() => expensiveFunction(data), [data]);
return <div>{computedValue}</div>;
};
β Saves performance by caching values.
4οΈβ£ Avoid Unnecessary State Updates
Placing state in the wrong place can cause wider re-renders.
β Bad (moves re-renders to parent):
const Parent = () => {
const [isOpen, setIsOpen] = useState(false);
return <Child isOpen={isOpen} />;
};
β
Better (keep state local):
const Child = () => {
const [isOpen, setIsOpen] = useState(false);
return <button onClick={() => setIsOpen(!isOpen)}>Toggle</button>;
};
β State should live as close to where itβs used as possible.
π― Key Takeaway
Optimizing React isnβt about premature optimization β itβs about preventing wasteful re-renders.
β Use React.memo
for pure components
β Use useCallback
to stabilize functions
β Use useMemo
to cache computations
β Keep state local to the component
π With these tricks, your React app will run faster, smoother, and more efficient.
π¬ Whatβs your go-to method for improving React performance? Letβs share best practices π
Top comments (0)