Explain lazy loading and code splitting in React.

Lazy loading loads components only when needed, while code splitting splits code into chunks, reducing initial bundle size and improving load times.

const LazyComponent = React.lazy(() => import('./LazyComponent'));

function App() {
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <LazyComponent />
    </React.Suspense>
  );
}