React Suspense allows you to easily add code-splitting into your application by lazy loading certain components, replacing them with something else until they've download.
Before code-splitting, your webpack build might generate a single file for all of your application code.
Imagine a React application with multiple pages and components. One of these pages is MyPage.
import React from "react";
import HeavyComponent from "./HeavyComponent";
const MyPage = () => (
  <div>
    <h1>I am the page</h1>
    <HeavyComponent />
  </div>
);
export default MyPage;Let's lazy load the HeavyComponent so it's code isn't downloaded by the browser until a visitor hits MyPage for the first time.
import React, { Suspense, lazy } from 'react';
const HeavyComponent = lazy(() => import('./HeavyComponent');
const MyPage = () => (
  <div>
    <h1>I am the page</h1>
    <Suspense fallback={<p>Loading...</p>}>
       <HeavyComponent />
    </Suspense>
 </div>
);
export default MyPage;HeavyComponent now gets split into a seperate chunk with a numbered filename in your build directory e.g. 1.js
Better filenames with webpackChunkName
1.js isn't a very helpful filename. Fortunately with webpackChunkName in an inline comment, we can instruct webpack to name the file something much friendlier.
const HeavyComponent = lazy(() => import(/* webpackChunkName: "HeavyComponent" */ './HeavyComponent');Now the chunk will be named HeavyComponent.js