İstemci Parçalarını Küçük Tutma
Coddy'nin React Journey'sinin Next.js Temel Esasları bölümünün bir parçası — ders 20 / 47.
Bir sayfanın etkileşimli bir düğmeye ihtiyacı olduğunda cazip bir kısayol vardır: sayfanın en üstüne 'use client' ekleyip geçmek. Bu çalışır. Ancak aynı zamanda Next.js'in size az önce sunduğu her şeyi çöpe atmanın en yaygın yoludur.
Kural 2'yi hatırlayın: direktif tüm dosyayı işaretler. Sayfayı işaretlediğinizde başlık, açıklama, yemek listesi ve onların işlediği her `component` tarayıcıda indirilen ve yeniden çalıştırılan `client` koduna dönüşür. Tek bir `button` tüm sayfayı sınırın diğer tarafına çekti.
Bunu düzelten alışkanlık küçük ve mekaniktir:
'use client'directive'ini en uç bileşenlere (leaf'lere) itin.
Etkileşimli kısmı kendi küçük dosyasına çekin, o dosyayı işaretleyin ve sayfanın sunucuda kalmasını sağlayın:
// app/page.jsx - hâlâ bir sunucu bileşeni
import LikeButton from '../components/LikeButton';
export default function Home() {
return (
<main>
<h1>Coddy Eats</h1>
<LikeButton />
</main>
);
}Dikkat edilmesi gereken iki şey var. İlk olarak, bir server componenti bir client componenti render edebilir: bu yön tamamen normaldir. İkinci olarak, page şekil değiştirmedi; yalnızca küçük bir parça taşındı.
Sizi aynı alışkanlığa yönlendiren ikinci bir hata daha var. Bir server bileşenindeki bir button üzerine doğrudan bir onClick koyduğunuzda çalışma zamanı sizi durdurur: Event handlers cannot be passed to Client Component props. Bir handler bir fonksiyondur: bir client dosyasında yaşamadığı sürece tarayıcıya olan yolculuktan sağ çıkamaz.
Görev
KolayBu sayfa, bir sunucu bileşeni (server component) içindeki bir düğmeye onClick yerleştirir, bu nedenle uygulama hiçbir şekilde işlenmeyecektir (render edilmeyecektir).
Sayfayı bir istemci bileşeni (client component) olarak işaretlemeden bunu düzeltin:
components/LikeButton.jsxdosyasında, bir beğeni sayısını state içinde tutan veid="like"olan bir düğme oluşturan bir istemci bileşeni (1. satırda'use client') yazın. MetniLikes:ve ardından sayı olmalıdır.app/page.jsxdosyasında, bozuk düğmeyi silin ve bunun yerine<LikeButton />bileşenini ekleyin. Onu'../components/LikeButton'konumundanimportedin.- Başlığı ve
taglinekısmını aynen bırakın: sayfanın bir sunucu bileşeni (server component) olarak kalması gerekir.
Kendin dene
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Next.js Temel Esasları bölümündeki tüm dersler
4Sunucu ve İstemci
İki Çeşit BileşenHatayı Okuma'use client' Satırıİstemci Parçalarını Küçük Tutmaİstemci İçinde SunucuÖzet: Sunucu ve İstemci