Проверяет понимание подходов к загрузке данных в Next.js с использованием серверных и клиентских компонентов, а также знание стратегий кеширования.
В Next.js загрузка данных зависит от того, где выполняется код: на сервере или на клиенте. Серверные компоненты (Server Components) выполняются только на сервере, что позволяет напрямую обращаться к базам данных или API без дополнительных слоев. Клиентские компоненты (Client Components) работают в браузере и требуют других подходов, например, использования хуков или библиотек для управления состоянием.
В Server Components вы можете использовать async функции и await для получения данных. Это упрощает код, так как не нужно обрабатывать состояния загрузки и ошибок на клиенте. Пример:
// app/page.tsx (Server Component)
export default async function Page() {
const res = await fetch('https://api.example.com/data');
const data = await res.json();
return <div>{data.title}</div>;
}По умолчанию fetch в Next.js кеширует результаты, что ускоряет повторные запросы. Вы можете управлять кешированием с помощью опций.
Для Client Components, которые помечены директивой 'use client', загрузка данных обычно происходит в useEffect или с помощью библиотек, таких как SWR или TanStack Query. Это необходимо, когда данные зависят от действий пользователя или требуют интерактивности.
// app/dashboard.tsx (Client Component)
'use client';
import { useEffect, useState } from 'react';
export default function Dashboard() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('/api/dashboard')
.then(res => res.json())
.then(setData);
}, []);
return <div>{data?.message}</div>;
}Next.js предлагает несколько стратегий кеширования для оптимизации производительности:
next: { revalidate: 60 }.cache: 'no-store' в fetch.Пример использования ISR:
const res = await fetch('https://api.example.com/posts', {
next: { revalidate: 60 } // обновлять каждые 60 секунд
});Выбор стратегии зависит от частоты обновления данных и требований к актуальности. Для статического контента лучше использовать SSG, для часто меняющихся данных — динамическую загрузку или ISR.
Итог: Понимание различий между серверными и клиентскими компонентами, а также умение применять стратегии кеширования, позволяет создавать быстрые и масштабируемые приложения на Next.js, минимизируя нагрузку на сервер и улучшая пользовательский опыт.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию