Next.js
Gyakori hibák
// ❌ Rossz – az egész oldal Client Component, feleslegesen
18. Gyakori hibák
1. Túl sok Client Component
// ❌ Rossz – az egész oldal Client Component, feleslegesen
'use client'
export default function ProductPage() {
const [products, setProducts] = useState([])
useEffect(() => { fetchProducts().then(setProducts) }, [])
return <ProductList products={products} />
}
// ✅ Helyes – Server Component, közvetlen adatlekérés
export default async function ProductPage() {
const products = await fetchProducts()
return <ProductList products={products} />
}2. Async params elfelejtése (Next.js 16)
// ❌ Rossz – TypeScript error és runtime bug Next.js 16-ban
export default async function Page({ params }) {
const { slug } = params // params nem awaited!
// ...
}
// ✅ Helyes
export default async function Page({
params,
}: {
params: Promise<{ slug: string }>
}) {
const { slug } = await params
// ...
}3. Rossz fetch duplikáció
// ❌ Rossz – fetchUser kétszer hívódik, két hálózati kérés
async function Header() {
const user = await fetchUser() // kérés #1
}
async function Sidebar() {
const user = await fetchUser() // kérés #2
}
// ✅ Helyes – React deduplikálja, csak egy kérés megy ki
// Ugyanolyan URL és opciók esetén automatikus deduplication4. useState inicializálás Server Componentben
// ❌ Rossz – Server Componentben nem lehet useState
export default async function Page() {
const [count, setCount] = useState(0) // Error!
// ...
}
// ✅ Helyes – state csak Client Componentben
'use client'
export function Counter() {
const [count, setCount] = useState(0)
// ...
}5. Env változók kikerülése kliensre
// ❌ Veszélyes – titkos API kulcs kerül a kliensre!
'use client'
export function ApiCall() {
fetch('https://api.example.com', {
headers: { 'Authorization': process.env.SECRET_API_KEY } // undefined kliens oldalon
})
}
// ✅ Helyes – titkos adat csak szerveren
export async function ServerApiCall() {
fetch('https://api.example.com', {
headers: { 'Authorization': process.env.SECRET_API_KEY } // biztonságos
})
}Szabály:
NEXT_PUBLIC_prefix nélküli env változók csak szerveren érhetők el. Ez szándékos és helyes.
6. Missing loading.tsx nagy adatlekérésekhez
// ❌ Rossz – nincs loading state, a felhasználó üres képernyőt lát
// app/slow-page/page.tsx
export default async function SlowPage() {
const data = await verySlowFetch() // 3 másodperc
return <DataView data={data} />
}
// ✅ Helyes – hozzáadni egy loading.tsx-t
// app/slow-page/loading.tsx
export default function Loading() {
return <Skeleton />
}7. Közvetlen client oldali navigáció szerver akcióban
// ❌ Rossz – router.push Server Actionből nem működik
'use server'
export async function submitForm() {
const router = useRouter() // Error! Hook nem használható Server Actionben
router.push('/success')
}
// ✅ Helyes – redirect() szerver oldalon
'use server'
import { redirect } from 'next/navigation'
export async function submitForm() {
await processForm()
redirect('/success')
}📝 Összefoglaló – 18. fejezet
- Ne tedd az egész oldalt Client Component-té – fetch data szerver oldalon
- Next.js 16:
paramséssearchParamsasync – mindigawait-eld - Titkos env változók (
SECRET_*) soha ne kerüljenek'use client'kódba - Adj mindig
loading.tsx-t lassú adatlekérésekhez