Next.js je framework pro React, který přidává funkce, které React sám nemá:
Začít je dobré pochopením jednotlivých renderovacích metod a jejich praktického využití.
Používáš, když data nejsou často měněná (např. blog, produktová stránka).
export async function getStaticProps() {
const res = await fetch('https://api.example.com/posts');
const posts = await res.json();
return {
props: { posts },
};
}
Používáš, když data musí být aktuální (např. personalizace, dashboard).
export async function getServerSideProps(context) {
const res = await fetch(`https://api.example.com/user/${context.params.id}`);
const user = await res.json();
return {
props: { user },
};
}
Používáš, když data nemusí být dostupná ihned a můžou se načítat asynchronně.
import { useEffect, useState } from 'react';
function Page() {
const [data, setData] = useState(null);
useEffect(() => {
fetch('/api/data')
.then((res) => res.json())
.then((data) => setData(data));
}, []);
return <div>{data ? data.message : 'Načítám...'}</div>;
}
Používáš, když chceš aktualizovat statickou stránku po nějakém čase.
export async function getStaticProps() {
const res = await fetch('https://api.example.com/products');
const products = await res.json();
return {
props: { products },
revalidate: 600, // aktualizace každých 10 minut
};
}
Podívej se na tento přehled:
"use client"
Direktiva "use client"
je důležitá pro komponenty, které potřebují klientský render. Například při použití:
useState
, useEffect
, nebo jiných React hooků.// Příklad struktury souboru
// pages/index.js
import Hero from '../components/Hero';
export default function HomePage() {
return <Hero />;
}
// components/Hero.js
'use client';
import { useState } from 'react';
import { motion } from 'framer-motion';
export default function Hero() {
const [count, setCount] = useState(0);
return (
<div>
<motion.h1 animate={{ scale: 1.2 }}>Welcome!</motion.h1>
<button onClick={() => setCount(count + 1)}>Click me {count}</button>
</div>
);
}