CodeBlanks Logo Icon CodeBlanks

Server bileşenli sayfa

Server bileşeniyle veri çeken bir sayfa yazarsın.

Server bileşenli sayfa

Üçüncü adımda bir server component sayfa yazacaksın. ProductPage async bir fonksiyondur ve await fetch ile ürünleri çeker.

Başlangıç kodu, Button ve ThemeProvider çözümlerini içerir; böylece tasarım sistemi ve tema hazır. Sayfa, sunucuda çizilir ve HTML olarak istemciye gider.

Ürünler bir <ul> içinde listelenir; her biri key ile izlenir.

İstemci bileşenle birleştirme

Server component'ten istemci bileşenine veri özellik olarak geçilir. Örneğin <Button variant="primary">Satın al</Button> bir client bileşendir; ama ProductPage içinde kullanılabilir.

Bu ayrım, veri çekmenin sunucuda, etkileşimin istemcide olmasını sağlar. Paket küçük, ilk çizim hızlı kalır.

children olarak da istemci bileşen geçilebilir.

Uygulama ProductPage server bileşenini yaz

ProductPage server bileşeni yaz. async function ProductPage(). await fetch('/api/products') ile çek, res.json() ile çöz. <main> içinde <h1>Ürünler</h1> ve <ul> içinde products.map(p => <li key={p.id}>{p.name}</li>). Dışa aktar.

Başlangıç kodu

App.jsx
// Button.jsx
function Button({ variant, children }) {
  const className = variant === 'primary' ? 'btn-primary' : 'btn-secondary';
  return <button className={className}>{children}</button>;
}
export default Button;

// ThemeProvider.jsx
import { createContext, useState } from 'react';

const ThemeContext = createContext();

function ThemeProvider({ children }) {
  const [theme, setTheme] = useState('light');
  return (
    <ThemeContext.Provider value={{ theme, setTheme }}>
      {children}
    </ThemeContext.Provider>
  );
}
export default ThemeProvider;

// ProductPage.jsx

// ProductPage server bileşenini buraya yaz

Örnek çözüm

App.jsx
async function ProductPage() {
  const res = await fetch('/api/products');
  const products = await res.json();
  return (
    <main>
      <h1>Ürünler</h1>
      <ul>{products.map(p => <li key={p.id}>{p.name}</li>)}</ul>
    </main>
  );
}
export default ProductPage;

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Server component kavramlarını eşleştir

Kavram Anlamı
async function Sunucuda veri çeker
await fetch Veriyi bekler
res.json JSON'a çöz
products.map Listeyi çiz

2 ProductPage hangi tür bileşendir?

  • Client component
  • Edge component
  • Shared component
  • Server component (async) Doğru cevap

Açıklama: ProductPage async bir server component'tir.

3 Boşluğu doldur: ürünleri listele

Soru
<ul>{products.map(p => <li ____={p.id}>{p.name}</li>)}</ul>
Cevap
<ul>{products.map(p => <li key={p.id}>{p.name}</li>)}</ul>

Açıklama: Liste öğeleri key ile izlenir.

Uzman seviye bölümündeki tüm dersler