Розуміння рендерингу в Next.js: Повний посібник для початківців 🚀

Привіт! Ти тільки починаєш працювати з Next.js? Давай розберемо різні способи, якими Next.js може відображати твої веб-сторінки простими словами. Не хвилюйся, якщо ти новачок — ми все розберемо крок за кроком!

pic

Що таке рендеринг? 🤔

Перш ніж почати, давай розберемося, що таке рендеринг простими словами:

  • Рендеринг — це спосіб перетворення твого коду в реальні веб-сторінки, які можуть бачити користувачі.
  • Це як випічка торта — ти можеш або готувати його, коли хтось робить замовлення (Server-Side Rendering), або мати його готовим заздалегідь (Static Site Generation).

Server-Side Rendering (SSR): Оновлений контент щоразу 🔄

Що таке SSR?

Уяви, що ти ведеш новинний сайт. Коли хтось відвідує твій сайт, йому потрібні останні новини, правда? Ось тут і проявляється SSR! Він створює сторінку в той момент, коли користувач її запитує, забезпечуючи актуальний контент кожного разу.

Давай подивимося на простий приклад:

// pages/news.js  
export async function getServerSideProps() {  
 // Цей код виконується на сервері щоразу, коли хтось відвідує сторінку  
 const response = await fetch('https://api.example.com/latest-news');  
 const news = await response.json();  

 return {  
 props: {  
 news, // Ці дані будуть передані на твою сторінку  
 fetchTime: new Date().toLocaleString() // Поточний час  
 }  
 };  
}  

// Компонент твоєї сторінки  
function NewsPage({ news, fetchTime }) {  
 return (  
   <div>  
     <h1>Останні новини</h1>  
     <p>Останнє оновлення: {fetchTime}</p>  
     {news.map(article => (    
       <div key={article.title}>  
         <h2>{article.title}</h2>  
         <p>{article.summary}</p>  
       </div>  
     ))}    
   </div>  
 );  
}  
export default NewsPage; 

Коли слід використовувати SSR?

Думай про SSR як про ідеальний варіант для:

  • Соціальних медіа (які постійно змінюються)
  • Панелей інструментів (які потребують останніх даних)
  • Персональних сторінок (наприклад, профілів)

Static Site Generation (SSG): Створюй один раз, використовуйте багато разів 📚

Що таке SSG?

SSG — це як приготування страв заздалегідь. Твої сторінки створюються під час побудови сайту, а не коли користувачі відвідують їх. Це робить їх надзвичайно швидкими!

Ось простий приклад блогу:

// pages/blog/[post].js  
export async function getStaticPaths() {  
  // Це каже Next.js, які сторінки потрібно створювати під час побудови сайту  
  const posts = [  
    { id: 1, title: 'Перша публікація' },  
    { id: 2, title: 'Друга публікація' }  
  ];  

  return {  
    paths: posts.map(post => ({  
      params: { post: post.id.toString() }  
    })),  
    fallback: false // Показати 404 для невідомих постів  
  };  
}  

export async function getStaticProps({ params }) {  
  // Це виконується під час побудови сайту  
  const post = await getBlogPost(params.post); // Твоя функція для отримання даних поста  

  return {  
    props: {  
      post  
    }  
  };  
}  

function BlogPost({ post }) {  
  return (  
    <div>  
      <h1>{post.title}</h1>  
      <p>{post.content}</p>  
    </div>  
  );  
}  
export default BlogPost; 

Коли слід використовувати SSG?

Ідеально для:

  • Блогів (контент рідко змінюється)
  • Сторінок документації
  • Сторінок товарів на e-commerce сайтах

Найкраще з обох світів: Інкрементальна статична регенерація (ISR) 🌟

Іноді тобі потрібні статичні сторінки, які оновлюються час від часу.
Ось де ISR (Інкрементальна статична регенерація) стає в нагоді! Це як робот-кухар, який переприготує страву кожні кілька годин.

// pages/products/[id].js  
export async function getStaticProps({ params }) {  
 const product = await getProduct(params.id);  

 return {  
 props: {  
 product  
 },  
 revalidate: 3600 // Оновлювати цю сторінку кожну годину (3600 секунд)  
 };  
}

Простий приклад проекту: Створюймо! 🛠️

Ось маленький проект, який поєднує обидва підходи:

// pages/index.js - Статична головна сторінка  
export async function getStaticProps() {  
 return {  
 props: {  
 welcomeMessage: "Ласкаво просимо на наш сайт!",  
 buildTime: new Date().toISOString()  
 }  
 };  
}  

// pages/profile/[username].js - Динамічний профіль користувача  
export async function getServerSideProps({ params }) {  
 const { username } = params;  

 const userData = await fetch(`/api/users/${username}`);  
 const user = await userData.json();  

 return {  
 props: {  
 user,  
 visitTime: new Date().toISOString()  
 }  
 };  
}

Як зробити правильний вибір 🎯

Ось простий спосіб вирішити:

  1. Твоя сторінка потребує даних в реальному часі? → Використовуй SSR
  2. Твій контент однаковий для всіх і рідко змінюється? → Використовуй SSG
  3. Потрібні періодичні оновлення? → Використовуй ISR

Типові помилки початківців, яких слід уникати ⚠️

  1. Не отримуй дані всередині компонентів, якщо можна використати getStaticProps або getServerSideProps
// ❌ Не роби так  
function BadExample() {  
 const [data, setData] = useState(null);  
 useEffect(() => {  
 fetch('/api/data').then(res => res.json()).then(setData);  
 }, []);  
}  

// ✅ Замість цього роби так  
export async function getStaticProps() {  
 const res = await fetch('https://api.example.com/data');  
 const data = await res.json();  

 return {  
 props: { data }  
 };  
}
  1. Пам’ятай: getServerSideProps виконується при кожному запиті, тому використовуй його лише коли це необхідно.

Підсумки 🎉

Тепер ти знаєш:

  • SSR створює сторінки за запитом (ідеально для даних в реальному часі)
  • SSG створює сторінки під час побудови сайту (надзвичайно швидко!)
  • ISR дозволяє автоматично оновлювати статичні сторінки

Розпочни з SSG для більшості сторінок, а SSR використовуй тільки коли потрібно отримувати дані в реальному часі. Це так просто!

Продовжуй кодити та експериментувати! Найкращий спосіб навчитися — створити щось своє. 🚀

Перекладено з: Understanding Next.js Rendering: A Complete Beginner’s Guide 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *