---
title: Ленивая загрузка
seo:
  title: Ленивая загрузка — React Developer
  description: 'Тема «Ленивая загрузка» для собеседования React Developer. Как реализовать lazy loading в React с использованием Suspense? Как работает "ленивая загрузка" (lazy loading) компонентов в React?'
---

[Все темы React Developer](/react-developer)

## <strong>Как реализовать</strong> <code>lazy loading</code> <strong>в React с использованием</strong> <code>Suspense</code><strong>?</strong> [#q-14bee738d69b81168d96d50cd1e6551e]

<code>Lazy loading</code> позволяет загружать компоненты только тогда, когда они
необходимы, улучшая производительность приложения.

#### Шаги&#58;

1. <strong>Используйте</strong> <code>React&#46;lazy</code>
   <strong>для динамического импорта компонента</strong>&#58;

   ```javascript
   const MyComponent = React.lazy(() => import("./MyComponent"));
   ```

1. <strong>Обертайте компонент в</strong> <code>React&#46;Suspense</code>
   <strong>и укажите fallback-контент</strong>&#58;

   ```jsx
   import React, { Suspense } from "react";

   const App = () => (
     <Suspense fallback={<div>Loading...</div>}>
       <MyComponent />
     </Suspense>
   );

   export default App;
   ```

#### Пример&#58;

```jsx
import React, { Suspense } from "react";

const MyComponent = React.lazy(() => import("./MyComponent"));

const App = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <MyComponent />
  </Suspense>
);

export default App;
```

Для реализации lazy loading в React используйте <code>React&#46;lazy</code> для динамического импорта компонентов и <code>React&#46;Suspense</code> для отображения fallback-контента во время их загрузки.

:::note[Ссылки для изучения]

1. [Оптимизация производительности в React](https://ru.legacy.reactjs.org/docs/optimizing-performance.html)
   :::

---

## <strong>Как работает "ленивая загрузка" (</strong><code>lazy loading</code><strong>) компонентов в React?</strong> [#q-14bee738d69b81fea192de8bf350a07d]

<strong>Ленивая загрузка</strong> — это техника, позволяющая загружать
компоненты только тогда, когда они необходимы, что улучшает производительность
приложения.

#### Основные шаги&#58;

{/* prettier-ignore */}
1. <strong>Динамический импорт с</strong> <code>React&#46;lazy</code>&#58;

    - <code>React&#46;lazy</code> используется для динамического импорта компонентов.

    ```javascript
    const MyComponent = React.lazy(() => import('./MyComponent'));
    ```

1. <strong>Обертка в</strong> <code>React&#46;Suspense</code>&#58;

    - Компонент оборачивается в <code>React&#46;Suspense</code> с указанием fallback-контента, который отображается во время загрузки компонента.

    ```jsx
    import React, { Suspense } from 'react';

    const App = () => (
      <Suspense fallback={<div>Loading...</div>}>
        <MyComponent />
      </Suspense>
    );

    export default App;
    ```

#### Пример&#58;

```jsx
import React, { Suspense } from "react";

// Динамический импорт компонента
const MyComponent = React.lazy(() => import("./MyComponent"));

const App = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <MyComponent />
  </Suspense>
);

export default App;
```

Ленивая загрузка компонентов в React осуществляется с помощью <code>React&#46;lazy</code> для динамического импорта и <code>React&#46;Suspense</code> для указания fallback-контента, что позволяет загружать компоненты только при необходимости и улучшать производительность приложения.

:::note[Ссылки для изучения]

1. [Оптимизация производительности в React](https://ru.legacy.reactjs.org/docs/optimizing-performance.html)
   :::

---

## <strong>Как работает "ленивая загрузка" (</strong><code>lazy loading</code><strong>) сторонних библиотек в React?</strong> [#q-14bee738d69b81a48cb1f378c657daa4]

<strong>Ленивая загрузка</strong> сторонних библиотек в React позволяет
загружать библиотеки только при необходимости, улучшая производительность
приложения.

#### Основные шаги&#58;

{/* prettier-ignore */}
1. <strong>Использование динамического импорта</strong>&#58;

    - Используйте функцию <code>import&#40;&#41;</code> для динамического импорта библиотеки.

1. <strong>Работа с импортированной библиотекой</strong>&#58;

    - Обработайте асинхронный импорт с помощью <code>async</code>/<code>await</code> или <code>&#46;then&#40;&#41;</code>.

#### Пример с <code>async</code>/<code>await</code>&#58;

```jsx
import React, { useState, useEffect } from "react";

const MyComponent = () => {
  const [library, setLibrary] = useState(null);

  useEffect(() => {
    const loadLibrary = async () => {
      const { default: lib } = await import("some-library");
      setLibrary(() => lib);
    };

    loadLibrary();
  }, []);

  if (!library) {
    return <div>Loading library...</div>;
  }

  // Использование библиотеки после загрузки
  return <div>{/* Используйте загруженную библиотеку */}</div>;
};

export default MyComponent;
```

#### Пример с <code>&#46;then&#40;&#41;</code>&#58;

```jsx
import React, { useState, useEffect } from "react";

const MyComponent = () => {
  const [library, setLibrary] = useState(null);

  useEffect(() => {
    import("some-library").then(({ default: lib }) => {
      setLibrary(() => lib);
    });
  }, []);

  if (!library) {
    return <div>Loading library...</div>;
  }

  // Использование библиотеки после загрузки
  return <div>{/* Используйте загруженную библиотеку */}</div>;
};

export default MyComponent;
```

Ленивая загрузка сторонних библиотек в React осуществляется с помощью динамического импорта <code>import&#40;&#41;</code>, что позволяет загружать библиотеки только при необходимости, улучшая производительность приложения.

:::note[Ссылки для изучения]

1. [Оптимизация производительности в React](https://ru.legacy.reactjs.org/docs/optimizing-performance.html)
   :::

---

## <strong>Как реализовать "ленивую загрузку" (</strong><code>lazy loading</code><strong>) изображений в React?</strong> [#q-14bee738d69b81d08088fb51ea34ca05]

Для реализации ленивой загрузки изображений в React можно использовать библиотеку <code>react&#45;lazyload</code> или встроенный атрибут <code>loading&#61;&#34;lazy&#34;</code>.

#### С использованием <code>react&#45;lazyload</code>&#58;

1. <strong>Установка библиотеки</strong>&#58;

   ```bash
   npm install react-lazyload
   ```

1. <strong>Использование компонента</strong> <code>LazyLoad</code>&#58;

   ```jsx
   import React from "react";
   import LazyLoad from "react-lazyload";

   const App = () => (
     <div>
       <LazyLoad height={200} offset={100}>
         <img src="path/to/image.jpg" alt="Lazy loaded example" />
       </LazyLoad>
     </div>
   );

   export default App;
   ```

#### С использованием атрибута <code>loading&#61;&#34;lazy&#34;</code>&#58;

```jsx
const App = () => (
  <div>
    <img src="path/to/image.jpg" alt="Lazy loaded example" loading="lazy" />
  </div>
);

export default App;
```

Для ленивой загрузки изображений в React используйте библиотеку <code>react&#45;lazyload</code> или встроенный атрибут <code>loading&#61;&#34;lazy&#34;</code> для элементов <code>&#60;img&#62;</code>.

:::note[Ссылки для изучения]

1. [Оптимизация производительности в React](https://ru.legacy.reactjs.org/docs/optimizing-performance.html)
   :::

---

## <strong>Что такое "</strong><code>code splitting</code><strong>" (разделение кода) в React?</strong> [#q-14bee738d69b81368e05dcade6239044]

<code>Code Splitting</code> — это техника оптимизации, которая позволяет
разбивать приложение на небольшие части (чанки), загружаемые по мере
необходимости, что улучшает производительность и уменьшает время загрузки.

#### Основные методы&#58;

{/* prettier-ignore */}
1. <strong>Динамический импорт</strong>&#58;

    - Использование <code>import&#40;&#41;</code> для загрузки модулей по требованию.

    ```javascript
    const MyComponent = React.lazy(() => import('./MyComponent'));
    ```

1. <strong>React.lazy и React.Suspense</strong>&#58;

    - Для асинхронной загрузки компонентов и отображения fallback-контента.

    ```jsx
    import React, { Suspense } from 'react';

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

    const App = () => (
      <Suspense fallback={<div>Loading...</div>}>
        <MyComponent />
      </Suspense>
    );

    export default App;
    ```

Code Splitting в React улучшает производительность, разбивая приложение на небольшие чанки, которые загружаются по мере необходимости, используя динамические импорты и React.lazy с React.Suspense.

:::note[Ссылки для изучения]

1. [Оптимизация производительности в React](https://ru.legacy.reactjs.org/docs/optimizing-performance.html)
   :::
