Использование ленивой загрузки (lazy loading) в React

22 дня назад·2 мин. на чтение

В этой статье мы покажем, как использовать ленивую загрузку (lazy loading) в React для улучшения производительности приложений.

React, стал одним из самых популярных JavaScript-фреймворков для создания пользовательских интерфейсов. С появлением функциональных компонентов и хуков в React, разработчики получили новые инструменты для более чистого и эффективного кода. Однако, с увеличением размеров проектов, возникает проблема производительности, и в этом контексте ленивая загрузка (lazy loading) становится важным инструментом.

Что такое Ленивая Загрузка?

Ленивая загрузка — это техника оптимизации производительности, которая позволяет откладывать загрузку определенных частей кода (или ресурсов) до тех пор, пока они действительно не понадобятся. В React ленивая загрузка применяется к компонентам, что особенно полезно при работе с крупными проектами.

Преимущества Ленивой Загрузки в React

  • Уменьшение начальной загрузки страницы: Ленивая загрузка позволяет снизить объем загружаемого кода при первоначальной загрузке страницы, что улучшает время загрузки и пользовательский опыт.
  • Оптимизация производительности: Загрузка компонентов по требованию помогает уменьшить нагрузку на ресурсы и улучшить отзывчивость приложения, поскольку только необходимый код будет загружен в момент, когда компонент станет видимым.
  • Экономия трафика: Ленивая загрузка также означает, что пользователи не будут загружать весь код приложения сразу, что особенно важно для пользователей с медленным интернет-соединением.

Как использовать Ленивую Загрузку в React

1. React.lazy()

React предоставляет функцию React.lazy(), которая позволяет лениво загружать компоненты. Пример:
const MyLazyComponent = React.lazy(() => import('./MyComponent'));

2. Suspense

Для отображения состояния ожидания загрузки ленивых компонентов используется компонент Suspense. Пример:
const MyLazyComponent = React.lazy(() => import('./MyComponent'));

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

3. Использование в функциональных компонентах

Ленивая загрузка также легко интегрируется в функциональные компоненты. Пример:
import React, { lazy, Suspense } from 'react';

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

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

export default App;

Итоги

Использование ленивой загрузки в React для функциональных компонентов является мощным инструментом оптимизации производительности. Эта техника позволяет улучшить время загрузки приложения, оптимизировать использование ресурсов и создавать более отзывчивые веб-приложения. При разработке больших проектов важно рассматривать ленивую загрузку как неотъемлемую часть процесса оптимизации.

Полное руководство по React Router v6. Часть 1 - Основы React Router

2 года назад·3 мин. на чтение

React Router — самая популярная библиотека маршрутизации в React, но разобраться в некоторых из более сложных функций может быть немного сложно. В этой серии статей рассмотрим все, что вам нужно знать о React Router, чтобы вы могли с легкостью использовать даже самые продвинутые функции.

Серия статей о React Router v6 состоит из 4 частей.
  1. Основы React Router (рассматривается в этой статье)
  2. Продвинутые определения маршрутов
  3. Управление навигацией
  4. Подробно о роутерах

Основы React Router

Прежде чем мы начнем углубляться в расширенные функции React Router, сначала поговорим об основах React Router. Чтобы использовать React Router, вам необходимо запустить npm i react-router-dom для установки React Router. Эта библиотека устанавливает DOM версию React Router. Если вы используете React Native, вам нужно будет установить react-router-native. За исключением этого небольшого отличия, библиотеки работают почти одинаково. В этой статье сосредоточимся на react-router-dom, но, как уже упоминалось, обе библиотеки почти идентичны. Чтобы использовать React Router, вам нужно сделать три вещи.
  1. Настроить роутер
  2. Прописать свои маршруты
  3. Управлять навигацией

Настройка роутера

Настройка роутера является самым простым шагом. Все, что вам нужно сделать, это импортировать конкретный роутер, который вам нужен (BrowserRouter для веба и NativeRouter для мобильных устройств) и обернуть все ваше приложение в этот роутер.
import React from "react"
import ReactDOM from "react-dom/client"
import App from "./App"
import { BrowserRouter } from "react-router-dom"

const root = ReactDOM.createRoot(document.getElementById("root"))
root.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>
)
Как правило, вы импортируете свой маршрутизатор в файле index.js вашего приложения, и он будет оборачивать компонент App. Роутер работает так же, как контекст в React, и предоставляет всю необходимую информацию вашему приложению, чтобы вы могли выполнять маршрутизацию и использовать все пользовательские хуки из React Router.

Определение маршрутов

Следующим шагом в React Router является определение ваших маршрутов. Обычно это делается на верхнем уровне приложения, например в компоненте App, но это можно сделать в любом месте.
import { Route, Routes } from "react-router-dom"
import { Home } from "./Home"
import { BookList } from "./BookList"

export function App() {
  return (
    <Routes>
      <Route path="/" element={<Home />} />
      <Route path="/books" element={<BookList />} />
    </Routes>
  )
}
Определить маршруты так же просто, как определить компонент Route для каждого маршрута в приложении, а затем поместить все эти компоненты Route в один компонент Routes. Всякий раз, когда ваш URL-адрес изменяется, React Router будет просматривать маршруты, определенные в вашем компоненте Routes, и он будет отображать содержимое в пропсе element роута Route, который имеет path, соответствующий URL-адресу. В приведенном выше примере, если бы наш URL-адрес был /books, то отображался бы компонент BookList. Преимущество React Router заключается в том, что при переходе между страницами он обновляет только содержимое внутри вашего компонента Routes. Весь остальной контент на вашей странице останется прежним, что повысит производительность и удобство использования.

Управление навигацией

Последним шагом к React Router является обработка навигации. Обычно в приложении вы перемещаетесь с помощью тегов <a>, но React Router использует свой собственный кастомный компонент Link для обработки навигации. Link представляет собой просто оболочку вокруг тега <a>, которая помогает обеспечить правильную обработку всей маршрутизации и условного повторного рендеринга, чтобы вы могли использовать его так же, как обычный тег <a>.
import { Route, Routes, Link } from "react-router-dom"
import { Home } from "./Home"
import { BookList } from "./BookList"

export function App() {
  return (
    <>
      <nav>
        <ul>
          <li><Link to="/">Home</Link></li>
          <li><Link to="/books">Books</Link></li>
        </ul>
      </nav>

      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/books" element={<BookList />} />
      </Routes>
    </>
  )
}
В нашем примере мы добавили две ссылки на главную страницу и страницу книг. Вы также заметите, что мы использовали проп to для установки URL-адреса вместо пропса href, который вы привыкли использовать с тегом <a>. Это единственное различие между компонентом Link и тегом <a>, и это то, что вам нужно помнить, так как легко ошибочно случайно использовать проп href вместо to. Еще одна вещь, которую следует отметить в нашем новом коде, заключается в том, что <nav>, который мы создаем в верхней части нашей страницы, находится за пределами нашего компонента Routes, что означает, что при смене страниц этот раздел навигации не будет повторно рендериться, так при изменении URL-адреса изменится только содержимое компонента Routes.