当前位置:首页 > React

React中如何实现延迟加载

2026-01-25 10:42:18React

使用React.lazy和Suspense实现组件级延迟加载

React.lazy函数允许动态导入组件,结合Suspense组件实现加载时的降级处理。这种方式适用于路由级或大型组件的按需加载。

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

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

动态导入配合状态管理

对于更细粒度的控制,可以使用动态import()语法配合组件状态管理。这种方法适用于需要条件触发加载的场景。

function LazyLoader() {
  const [Component, setComponent] = useState(null);

  useEffect(() => {
    import('./HeavyComponent').then(comp => {
      setComponent(comp.default);
    });
  }, []);

  return Component ? <Component /> : <LoadingSpinner />;
}

路由级别的代码分割

React Router与React.lazy天然适配,可以实现基于路由的代码分割。这种模式在单页应用中特别有效。

const Home = React.lazy(() => import('./routes/Home'));
const About = React.lazy(() => import('./routes/About'));

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/about" element={<About />} />
      </Routes>
    </Suspense>
  );
}

图片资源的懒加载

对于非组件资源如图片,可以使用原生loading="lazy"属性或Intersection Observer API。现代浏览器已原生支持图片懒加载。

<img 
  src="placeholder.jpg" 
  data-src="actual-image.jpg" 
  loading="lazy"
  onLoad={e => {
    e.target.src = e.target.dataset.src;
  }}
/>

第三方库实现高级功能

使用react-lazyload等第三方库可以获得更多高级功能如阈值控制、占位符管理等。这些库通常基于Intersection Observer实现。

import LazyLoad from 'react-lazyload';

<LazyLoad height={200} offset={100}>
  <img src="actual-image.jpg" />
</LazyLoad>

Webpack配置优化

配合打包工具如Webpack,可以通过魔术注释控制代码分割行为。这种方式可以优化最终的bundle生成策略。

const Component = React.lazy(() => import(
  /* webpackChunkName: "special-chunk" */
  /* webpackPrefetch: true */
  './SpecialComponent'
));

服务端渲染兼容方案

在SSR场景下需要使用@loadable/component等专门库。这些解决方案能正确处理服务器端的模块加载。

React中如何实现延迟加载

import loadable from '@loadable/component';

const LazyComponent = loadable(() => import('./LazyComponent'));

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

分享给朋友:

相关文章

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…

react如何实现插槽

react如何实现插槽

React 实现插槽的方法 React 本身没有直接提供类似 Vue 的插槽(slot)概念,但可以通过以下几种方式实现类似功能: 使用 props.children React 组件可以通过 pr…

vue如何实现截图

vue如何实现截图

Vue 实现截图的方法 在 Vue 中实现截图功能可以通过多种方式完成,以下是几种常见的实现方法: 使用 html2canvas 库 html2canvas 是一个流行的 JavaScript 库,…

react如何实现分页

react如何实现分页

实现分页的基本思路 在React中实现分页通常需要以下几个核心步骤:管理当前页码状态、计算分页数据、渲染分页控件。以下是一个典型的分页实现方法。 管理分页状态 使用React的useState钩子来…

react如何实现菜单

react如何实现菜单

使用 React 实现菜单的方法 使用状态管理控制菜单显示/隐藏 通过 useState 管理菜单的展开和收起状态,结合点击事件切换状态。 import { useState } from 'rea…