DEV Community

Cover image for The 5 Practical Uses of Lazy Loading in React
Vijay
Vijay

Posted on

The 5 Practical Uses of Lazy Loading in React

Building complex React apps? Lazy loading offers a powerful solution for optimized performance.

React applications can become hefty, impacting initial load times. Lazy loading offers a solution by strategically deferring component loading, resulting in a faster and more responsive user experience.

Here are 5 practical ways to leverage Lazy Loading in React, along with code examples:

1. Enhance Initial Load Time

  • Reduce the initial bundle size by loading non-critical components on demand.
  • This ensures users see the core content faster and minimizes initial wait times.
  • Imagine an e-commerce site. Lazy load product details pages to prioritize the product listing on the initial load.
const ProductDetails = React.lazy(() => import('./ProductDetails'));

function ProductList() {
  const [productId, setProductId] = useState(null);

  const handleProductClick = (id) => setProductId(id);

  return (
    <div>
      {/* List of products */}
      <ul>
        {/* ... */}
        <li onClick={() => handleProductClick(1)}>Product 1</li>
        {/* ... */}
      </ul>
      {productId && (
        <Suspense fallback={<div>Loading...</div>}>
          <ProductDetails productId={productId} />
        </Suspense>
      )}
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

2. Improve Performance on Slow Connections

  • By only loading components in view, lazy loading minimizes data transferred on slower connections.
  • This translates to a smoother user experience for users with limited bandwidth.
  • Think about a news app. Don't load comment sections on every article initially, but only when a user clicks to view them.
const Comments = React.lazy(() => import('./Comments'));

function Article(props) {
  const [showComments, setShowComments] = useState(false);

  return (
    <div>
      <h2>{props.title}</h2>
      <p>{props.content}</p>
      <button onClick={() => setShowComments(true)}>View Comments</button>
      {showComments && (
        <Suspense fallback={<div>Loading...</div>}>
          <Comments articleId={props.id} />
        </Suspense>
      )}
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

3. Optimize Complex UIs with Many Features

  • Break down complex UIs into smaller, lazy-loaded components.
  • This improves maintainability and reduces the initial bundle size for large applications.
  • A complex data visualization dashboard can benefit from lazy loading specific charts based on user interactions.
const Chart1 = React.lazy(() => import('./Chart1'));
const Chart2 = React.lazy(() => import('./Chart2'));

function Dashboard() {
  const [selectedChart, setSelectedChart] = useState('chart1');

  return (
    <div>
      <button onClick={() => setSelectedChart('chart1')}>Chart 1</button>
      <button onClick={() => setSelectedChart('chart2')}>Chart 2</button>
      {selectedChart === 'chart1' && (
        <Suspense fallback={<div>Loading...</div>}>
          <Chart1 />
        </Suspense>
      )}
      {selectedChart === 'chart2' && (
        <Suspense fallback={<div>Loading...</div>}>
          <Chart2 />
        </Suspense>
      )}
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

4. Manage Third-Party Libraries Strategically

  • Defer loading of third-party libraries that are not crucial for initial rendering.
  • This helps prioritize core functionality and reduces initial load times, especially for libraries with large footprints.
  • Consider lazy loading a social media sharing widget that might not be used on every page.
const SocialShare = React.lazy(() => import('./SocialShare'));

function ProductPage() {
  // ... product details
  return (
    <div>
      {/* Product details */}
      <Suspense fallback={<div>Loading...</div>}>
        <SocialShare />
      </Suspense>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

5. Enhance Code Splitting for Large Applications

  • Lazy loading complements code splitting, a technique to break down the application codebase into smaller bundles.
  • This allows for on-demand loading of specific code sections along with their corresponding lazy-loaded components.
  • Leverage lazy loading and code splitting together for a granular approach to optimized loading in complex React applications.

By incorporating lazy loading into your React development strategy, you can create performant, user-centric applications that deliver a seamless experience across various devices and network connections.

Top comments (0)