spinny:~/writing $ less mastering-react-server-components.md
12React Server Components (RSC) telah mengubah secara fundamental cara kita membangun aplikasi React. Dengan memindahkan logika rendering ke server, kita dapat mengurangi secara signifikan bundle JavaScript yang dikirim ke client, menghasilkan waktu muat yang lebih cepat dan pengalaman pengguna yang lebih baik. Dalam artikel ini, kita akan mengeksplorasi pola-pola lanjutan dan praktik terbaik untuk memanfaatkan RSC di 2026.34## Apa itu Server Components?56Secara tradisional, komponen React dirender sepenuhnya di client (CSR) atau di-pre-render di server sebagai HTML (SSR) dan kemudian dihidrasi di client. **Server Components** memungkinkan kita merender komponen _secara eksklusif_ di server. Kode mereka tidak pernah dikirim ke browser.78### Manfaatnya9101. **Ukuran Bundle Nol**: Dependensi yang digunakan di Server Components (seperti parser markdown atau library tanggal yang berat) tetap di server.112. **Akses Backend Langsung**: Anda dapat melakukan query ke database langsung di dalam komponen tanpa mengekspos endpoint API.123. **Code Splitting Otomatis**: Client components yang diimpor di sisi server secara otomatis dipecah kodenya.1314## Pola Pengambilan Data1516Dengan RSC, Anda dapat membuat komponen `async` dan mengawait data secara langsung.1718```tsx19// app/users/page.tsx20import { db } from '@/lib/db';2122export default async function UsersPage() {23 const users = await db.user.findMany();2425 return (26 <main>27 <h1>Users</h1>28 <ul>29 {users.map((user) => (30 <li key={user.id}>{user.name}</li>31 ))}32 </ul>33 </main>34 );35}36```3738### Suspense untuk Streaming3940Karena pengambilan data bisa lambat, bungkus komponen Anda dalam `<Suspense>` untuk menampilkan UI fallback segera saat data dimuat.4142```tsx43import { Suspense } from 'react';44import UserList from './UserList';45import LoadingSkeleton from './LoadingSkeleton';4647export default function Page() {48 return (49 <section>50 <h1>My Users</h1>51 <Suspense fallback={<LoadingSkeleton />}>52 <UserList />53 </Suspense>54 </section>55 );56}57```5859## Menggabungkan Server dan Client Components6061Salah satu aspek yang paling membingungkan adalah bagaimana menggabungkan Server dan Client components.6263**Aturan Umum**: Server Components dapat mengimpor Client Components. Client Components _tidak dapat_ mengimpor Server Components secara langsung. Namun, Anda dapat meneruskan Server Component sebagai `children` ke Client Component.6465### Pola "Children"6667```tsx68// ClientComponent.tsx69'use client';7071import { useState } from 'react';7273export default function ClientWrapper({ children }) {74 const [count, setCount] = useState(0);7576 return (77 <div onClick={() => setCount((c) => c + 1)}>78 Count: {count}79 {children} {/* This can be a Server Component! */}80 </div>81 );82}83```8485```tsx86// ServerPage.tsx87import ClientWrapper from './ClientWrapper';88import ServerContent from './ServerContent';8990export default function Page() {91 return (92 <ClientWrapper>93 <ServerContent /> {/* This works perfectly */}94 </ClientWrapper>95 );96}97```9899## Jebakan Umum1001011. **Menggunakan Context di Server Components**: Context adalah konsep sisi client. Jika Anda perlu berbagi data di sisi server, teruskan sebagai props atau gunakan cache cakupan request yang khusus.1022. **Menambahkan Event Handler**: Anda tidak dapat menambahkan `onClick` atau `onChange` ke Server Component. Logika tersebut ditempatkan di Client Component generik sebagai node daun.103104## Kesimpulan105106React Server Components bukan hanya sebuah fitur; ini adalah pergeseran paradigma. Dengan memahami batas antara server dan client, Anda dapat membangun aplikasi yang sangat interaktif dan luar biasa cepat.107
:Menguasai React Server Components di 2026lines 1-107 (END) — press q to close