超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

精通 React 懶加載:完整指南介紹,不容錯(cuò)過(guò)!

admin
2024年12月31日 7:47 本文熱度 1063

引言

React 懶加載是一種強(qiáng)大的性能優(yōu)化技術(shù),通過(guò)將代碼拆分為較小的塊并按需加載,有助于減少應(yīng)用程序的初始包大小。本指南將向您展示如何在 React 應(yīng)用程序中有效地實(shí)現(xiàn)懶加載。

理解 React 懶加載

React 為實(shí)現(xiàn)代碼拆分提供了兩個(gè)主要功能:

  • React.lazy():允許您將動(dòng)態(tài)導(dǎo)入渲染為常規(guī)組件
  • Suspense:在等待懶加載組件加載時(shí)顯示備用內(nèi)容

基本實(shí)現(xiàn)

簡(jiǎn)單組件懶加載

import React, { lazy, Suspense } from'react';


// 不再使用常規(guī)導(dǎo)入

// import ExpensiveComponent from './ExpensiveComponent';


// 使用懶加載

constExpensiveComponent = lazy(() =>import('./ExpensiveComponent'));


functionApp() {

return (

    <Suspense fallback={<div>Loading...</div>}>

      <ExpensiveComponent />

    </Suspense>

  );

}

基于路由的懶加載

import React, { lazy, Suspense } from'react';

import { BrowserRouterasRouter, Routes, Route } from'react-router-dom';


// 懶加載路由組件

constHome = lazy(() =>import('./routes/Home'));

constDashboard = lazy(() =>import('./routes/Dashboard'));

constProfile = lazy(() =>import('./routes/Profile'));


functionApp() {

return (

    <Router>

      <Suspense fallback={<div>Loading...</div>}>

        <Routes>

          <Route path="/" element={<Home />} />

          <Route path="/dashboard" element={<Dashboard />} />

          <Route path="/profile" element={<Profile />} />

        </Routes>

      </Suspense>

    </Router>

  );

}

高級(jí)模式

1. 自定義加載組件

const LoadingSpinner = () => (

<div className="loading-spinner">

    <div className="spinner"></div>

    <p>Loading content...</p>

  </div>

);


// 可復(fù)用的懶加載包裝器

constLazyComponent = ({ component,...props }) => {

return (

    <Suspense fallback={<LoadingSpinner />}>

      <Component {...props} />

    </Suspense>

  );

};


// 使用

constMyLazyComponent = lazy(() =>import('./MyComponent'));

<LazyComponent component={MyLazyComponent} someProp="value" />;

2. 錯(cuò)誤邊界集成

class ErrorBoundaryextendsReact.Component {

constructor(props) {

    super(props);

    this.state = { hasError: false };

  }


staticgetDerivedStateFromError(error) {

    return { hasError: true };

  }


componentDidCatch(error, errorInfo) {

    console.error('Lazy loading error:', error, errorInfo);

  }


render() {

    if (this.state.hasError) {

      return<div>Something went wrong. Please try again.</div>;

    }


    returnthis.props.children;

  }

}


// 使用懶加載

functionApp() {

return (

    <ErrorBoundary>

      <Suspense fallback={<LoadingSpinner />}>

        <MyLazyComponent />

      </Suspense>

    </ErrorBoundary>

  );

}

3. 預(yù)加載組件

const MyLazyComponent = lazy(() =>import('./MyComponent'));


// 當(dāng)鼠標(biāo)懸停在按鈕上時(shí)預(yù)加載組件

functionPreloadButton() {

consthandleMouseEnter = () => {

    const componentPromise = import('./MyComponent');

    // 組件將在懸停時(shí)開始加載

  };


return (

    <button 

      onMouseEnter={handleMouseEnter}

      onClick={() => setShowComponent(true)}

    >

      Show Component

    </button>

  );

}

最佳實(shí)踐

1、選擇合適的粒度

// 粒度太細(xì)(避免)

const Button = lazy(() => import('./Button'));


// 更好 - 懶加載功能模塊

const FeatureModule = lazy(() => import('./features/FeatureModule'));

2、組合相關(guān)組件

// 一起懶加載相關(guān)組件

const AdminDashboard = lazy(() => import('./admin/Dashboard'));

// 這將在一個(gè)塊中加載所有管理組件

3、優(yōu)雅地處理加載狀態(tài)

const LoadingFallback = () => (

  <div className="loading-state">

    <Skeleton> /* 使用骨架加載 */ </Skeleton>

    <ProgressBar> /* 顯示加載進(jìn)度 */ </ProgressBar>

  </div>

);


function App() {

  return (

    <Suspense fallback={<LoadingFallback />}>

      <MyLazyComponent />

    </Suspense>

  );

}

常見模式和用例

1. 模態(tài)框/對(duì)話框懶加載

const Modal = lazy(() => import('./Modal'));


function App() {

  const [isOpen, setIsOpen] = useState(false);


  return (

    <>

      <button onClick={() => setIsOpen(true)}>Open Modal</button>

      {isOpen && (

        <Suspense fallback={<LoadingSpinner />}>

          <Modal onClose={() => setIsOpen(false)} />

        </Suspense>

      )}

    </>

  );

}

2. 條件功能加載

function FeatureFlag({ flag, children }) {

  const LazyFeature = lazy(() => 

    flag? import('./NewFeature') : import('./OldFeature')

  );


  return (

    <Suspense fallback={<LoadingSpinner />}>

      <LazyFeature>{children}</LazyFeature>

    </Suspense>

  );

}

性能提示

1、塊命名

?

2、加載優(yōu)先級(jí)

// 高優(yōu)先級(jí)路由

constMainContent = lazy(() =>

import(/* webpackPrefetch: true */'./MainContent')

);


// 低優(yōu)先級(jí)功能

constAnalytics = lazy(() =>

import(/* webpackPreload: true */'./Analytics')

);

要避免的常見陷阱

  1. 不要懶加載在初始渲染時(shí)始終需要的組件
  2. 避免懶加載非常小的組件
  3. 不要忘記處理加載和錯(cuò)誤狀態(tài)
  4. 小心嵌套的 Suspense 邊界

監(jiān)控和分析

const trackComponentLoad = (componentName) => {

// 跟蹤加載時(shí)間和成功

  performance.mark(`${componentName}-start`);

return {

    success: () => {

      performance.mark(`${componentName}-end`);

      performance.measure(

        `${componentName}-load`,

        `${componentName}-start`,

        `${componentName}-end`

      );

    },

    error: (error) => {

      // 將錯(cuò)誤記錄到分析中

      console.error(`Failed to load ${componentName}:`, error);

    }

  };

};


// 使用

constMyComponent = lazy(() => {

const tracking = trackComponentLoad('MyComponent');

returnimport('./MyComponent')

  .then(module => {

      tracking.success();

      returnmodule;

    })

  .catch(error => {

      tracking.error(error);

      throw error;

    });

});

結(jié)論

React 懶加載是優(yōu)化大型 React 應(yīng)用程序的重要工具。通過(guò)遵循這些模式和最佳實(shí)踐,您可以顯著提高應(yīng)用程序的初始加載時(shí)間和整體性能。


原文地址:https://dev.to/manikanta_ketha_bf00556e9/mastering-react-lazy-loading-a-complete-guideintroduction-4ii5


閱讀原文:原文鏈接


該文章在 2025/4/30 14:39:20 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved