Оптимизация React-приложений помогает уменьшить количество ненужных рендеров, ускорить загрузку и улучшить общую производительность. В этой статье рассмотрим использование React.memo
и Server Components.
1. React.memo
Что такое `React.memo`?
`React.memo` — это HOC (Higher-Order Component), который мемоизирует компонент, предотвращая его повторный рендер, если props не изменились.Синтаксис
```javascript const MemoizedComponent = React.memo(Component); ```Пример использования
```javascript import React from 'react';function Child({ count }) { console.log('Child rendered'); return
Count: {count}
; }const MemoizedChild = React.memo(Child);
function Parent() { const [count, setCount] = React.useState(0); const [text, setText] = React.useState('');
return (
<button onClick={() => setCount(count + 1)}>Increment
<input value={text} onChange={(e) => setText(e.target.value)} />
);
}
text
<h3 id="когда-использовать-reactmemo">Когда использовать `React.memo`?</h3>
- Компоненты рендерятся часто с одинаковыми props.
- Рендер компонента затратный по времени.
<h3 id="особенности">Особенности</h3>
- `React.memo` сравнивает props поверхностно. Для глубокого сравнения используйте вторую аргумент-функцию.
<h4 id="пример-с-кастомным-сравнением">Пример с кастомным сравнением</h4>
```javascript
const MemoizedChild = React.memo(Child, (prevProps, nextProps) => {
return prevProps.count === nextProps.count;
});
2. Server Components
Что такое Server Components?
Server Components (Серверные компоненты) — это новая возможность React, которая позволяет выполнять рендеринг компонентов на сервере. Это снижает нагрузку на клиент и улучшает производительность за счёт отправки минимального JavaScript на клиентскую сторону.Основные преимущества
- Улучшение производительности за счёт рендеринга на сервере. - Уменьшение размера загружаемого JavaScript. - Возможность использования серверных ресурсов (например, базы данных) напрямую внутри компонентов.Пример структуры проекта
``` src/ components/ Header.server.js Footer.client.js ```Как работают Server Components?
1. Сервер рендерит компоненты и отправляет их в виде готовой HTML-структуры. 2. Клиентская часть React обрабатывает и монтирует компоненты.Пример
```javascript // Header.server.js export default function Header() { returnThis is rendered on the server
; }// Footer.client.js export default function Footer() { return
This is rendered on the client
; }// App.js import Header from './components/Header.server'; import Footer from './components/Footer.client';
function App() { return (
text
<h3 id="ограничения-server-components">Ограничения Server Components</h3>
- Нельзя использовать хуки, связанные с состоянием или эффектами (например, `useState`, `useEffect`).
- Подходит для задач, не требующих взаимодействия с клиентом.
---
<h2 id="3-когда-использовать-эти-подходы">3. Когда использовать эти подходы?</h2>
<h3 id="reactmemo">React.memo</h3>
- Для оптимизации клиентских компонентов с неизменяемыми props.
- Когда производительность страдает из-за частых ререндеров.
<h3 id="server-components">Server Components</h3>
- Для рендеринга больших объёмов данных, которые не требуют интерактивности.
- Для снижения размера клиентского JavaScript.
---
<h2 id="итоговые-вопросы-для-подготовки">Итоговые вопросы для подготовки</h2>
1. Как работает `React.memo`, и какие задачи он решает?
2. В чём разница между Server Components и стандартными клиентскими компонентами?
3. Какие ограничения существуют при использовании Server Components?
4. Когда следует избегать применения `React.memo`?
5. Как правильно комбинировать эти два подхода в одном проекте?
**Совет:** Экспериментируйте с использованием `React.memo` для оптимизации клиентской части и Server Components для ускорения серверного рендеринга.