Инкрементная статическая регенерация (Incremental Static Regeneration, ISR) в Next.js позволяет обновлять статический контент после его первоначальной сборки, не требуя полной пересборки приложения. Это особенно полезно для сайтов с большим количеством статических страниц, которые изменяются нечасто.
В моих проектах я использовал ISR для улучшения производительности и пользовательского опыта. Например, на сайте электронной коммерции детали продуктов в основном статичны, но цены могут колебаться. Используя ISR, я настроил страницы продуктов как статические во время сборки, а затем периодически пересоздавал их для обновления информации о ценах. Этот подход снижает нагрузку на сервер и гарантирует, что пользователи видят актуальные данные.
Пример использования ISR в Next.js:
function Product({ product }) {
return (
<div>
<h1>{product.name}</h1>
<p>{product.price}</p>
</div>
);
}
export async function getStaticPaths() {
// Получаем список всех продуктов
const res = await fetch('https://api.example.com/products');
const products = await res.json();
// Создаем пути для каждого продукта
const paths = products.map((product) => ({
params: { id: product.id.toString() },
}));
return { paths, fallback: 'blocking' };
}
export async function getStaticProps({ params }) {
// Получаем данные для конкретного продукта
const res = await fetch(`https://api.example.com/products/${params.id}`);
const product = await res.json();
return {
props: { product },
revalidate: 60, // Пересоздаем страницу каждые 60 секунд
};
}
export default Product;
В этом примере getStaticPaths
генерирует пути для каждого продукта, а getStaticProps
получает данные для конкретного продукта и настраивает пересоздание страницы каждые 60 секунд с помощью параметра revalidate
. Это позволяет обновлять информацию о продуктах без полной пересборки приложения.