0Pricing
React Academy · บทเรียน

ทำความเข้าใจ React Server Components

ทำความเข้าใจว่า RSC คืออะไร แตกต่างจากคอมโพเนนต์ฝั่งไคลเอ็นต์อย่างไร และควรใช้แต่ละแบบเมื่อใด

ทำความเข้าใจ React Server Components เป็นบทเรียน React Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน React Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

ยินดีต้อนรับ

ในบทเรียนนี้ คุณจะเรียนรู้ว่า React Server Components (RSCs) คืออะไร แตกต่างจากคอมโพเนนต์ฝั่งไคลเอนต์อย่างไร และควรใช้แต่ละประเภทเมื่อใด

โลกของคอมโพเนนต์สองฝั่ง

React 19 และ Next.js App Router แบ่งคอมโพเนนต์ออกเป็นสองโลก: **คอมโพเนนต์ฝั่งเซิร์ฟเวอร์** (เรนเดอร์บนเซิร์ฟเวอร์และไม่มีการโต้ตอบ) และ **คอมโพเนนต์ฝั่งไคลเอนต์** (เรนเดอร์ทั้งบนเซิร์ฟเวอร์และไคลเอนต์ พร้อมสถานะและตัวจัดการเหตุการณ์)

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เป็นค่าเริ่มต้น

ใน Next.js App Router คอมโพเนนต์ทุกตัวเป็นคอมโพเนนต์ฝั่งเซิร์ฟเวอร์ตามค่าเริ่มต้น คุณสามารถเลือกใช้โหมดคอมโพเนนต์ฝั่งไคลเอนต์ได้โดยเพิ่ม 'use client' ที่ด้านบนของไฟล์
// Server Component (default, no directive needed)
export default async function Page() {
  const data = await fetch('/api/posts').then(r => r.json());
  return <ul>{data.map(p => <li key={p.id}>{p.title}</li>)}</ul>;
}

คอมโพเนนต์ฝั่งไคลเอนต์

เพิ่ม 'use client' ที่ด้านบนของไฟล์เพื่อทำให้ไฟล์นั้นเป็นคอมโพเนนต์ฝั่งไคลเอนต์ คอมโพเนนต์ฝั่งไคลเอนต์สามารถใช้ useState, useEffect, ตัวจัดการเหตุการณ์ และ API ของเบราว์เซอร์ได้
'use client';
import { useState } from 'react';

export function Counter() {
  const [n, setN] = useState(0);
  return <button onClick={() => setN(n+1)}>{n}</button>;
}

ความสามารถของคอมโพเนนต์ฝั่งเซิร์ฟเวอร์

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์สามารถทำสิ่งต่อไปนี้ได้: รอ query ฐานข้อมูล อ่านระบบไฟล์ เข้าถึงข้อมูลลับของสภาพแวดล้อม นำเข้าแพ็กเกจขนาดใหญ่ที่ใช้ได้เฉพาะบนเซิร์ฟเวอร์ และเรนเดอร์โดยไม่ส่ง JavaScript ไปยังไคลเอนต์
// Fetch from DB directly in the component!
import { db } from '@/lib/db';

export default async function UserList() {
  const users = await db.select().from(usersTable);
  return <ul>{users.map(u => <li key={u.id}>{u.name}</li>)}</ul>;
}

ข้อจำกัดของคอมโพเนนต์ฝั่งเซิร์ฟเวอร์

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์ CANNOT: ใช้ useState, useEffect, ตัวจัดการเหตุการณ์ (onClick และอื่น ๆ), API ของเบราว์เซอร์ (window, localStorage) หรือ Context สิ่งเหล่านี้ต้องใช้ 'use client'

การประกอบคอมโพเนนต์ฝั่งเซิร์ฟเวอร์และไคลเอนต์

รูปแบบที่ใช้กันทั่วไปคือ คอมโพเนนต์ฝั่งเซิร์ฟเวอร์ดึงข้อมูลแล้วส่งต่อให้คอมโพเนนต์ฝั่งไคลเอนต์ในรูปแบบ props เซิร์ฟเวอร์จัดการข้อมูล ส่วนไคลเอนต์จัดการการโต้ตอบ
// Server Component
export default async function Page() {
  const user = await getUser();
  return <ProfileEditor user={user} />; // client component
}

// Client Component (separate file)
'use client';
export function ProfileEditor({ user }) {
  const [name, setName] = useState(user.name);
  return <input value={name} onChange={e => setName(e.target.value)} />;
}

กฎขอบเขตฝั่งไคลเอนต์

เมื่อคุณกำหนดให้ไฟล์เป็น 'use client' คอมโพเนนต์ทั้งหมดที่ไฟล์นั้นนำเข้าจะถูกถือว่าเป็นคอมโพเนนต์ฝั่งไคลเอนต์ด้วย ขอบเขตระหว่างฝั่งเซิร์ฟเวอร์และไคลเอนต์จะทำงานในระดับไฟล์

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์ที่ไม่ใช้ JavaScript

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เรนเดอร์เป็น HTML บนเซิร์ฟเวอร์ โค้ดของคอมโพเนนต์เหล่านี้ NEVER ถูกส่งไปยังเบราว์เซอร์ จึงช่วยลดขนาดชุด JavaScript ได้อย่างมาก

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์เทียบกับ SSR

SSR แบบดั้งเดิมเรนเดอร์ทั้งหน้าเป็น HTML แต่ส่งโค้ดของคอมโพเนนต์ทั้งหมดไปยังไคลเอนต์เพื่อทำ hydration ส่วนคอมโพเนนต์ฝั่งเซิร์ฟเวอร์จะไม่ส่งโค้ดไปยังไคลเอนต์เลย มีเพียงผลลัพธ์ที่เรนเดอร์แล้วเท่านั้น

ตรวจสอบด่วน

คุณต้องเพิ่มคำสั่งใดในไฟล์เพื่อทำให้ไฟล์นั้นเป็นคอมโพเนนต์ฝั่งไคลเอนต์ของ React ใน Next.js App Router

สรุปทบทวน

คอมโพเนนต์ฝั่งเซิร์ฟเวอร์ทำงานบนเซิร์ฟเวอร์ เข้าถึงฐานข้อมูลและข้อมูลลับได้ และไม่ส่ง JS ไปยังไคลเอนต์ คอมโพเนนต์ฝั่งไคลเอนต์เพิ่ม 'use client' และรองรับสถานะ เอฟเฟกต์ และตัวจัดการเหตุการณ์ ให้ประกอบคอมโพเนนต์ทั้งสองแบบเข้าด้วยกัน: ฝั่งเซิร์ฟเวอร์ดึงข้อมูล ส่วนฝั่งไคลเอนต์จัดการการโต้ตอบ

ขั้นถัดไป

บทเรียนถัดไป: **ฮุก use() สำหรับทรัพยากรแบบอะซิงโครนัส** — คุณจะอ่าน promise และ context ระหว่างการเรนเดอร์ด้วยฮุก use() ของ React 19

คำถามที่พบบ่อย

บทเรียน “ทำความเข้าใจ React Server Components” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ทำความเข้าใจ React Server Components” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส React Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส React Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ทำความเข้าใจ React Server Components”

ทำความเข้าใจว่า RSC คืออะไร แตกต่างจากคอมโพเนนต์ฝั่งไคลเอ็นต์อย่างไร และควรใช้แต่ละแบบเมื่อใด คุณปฏิบัติ React Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน React Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน React Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ทำความเข้าใจ React Server Components” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน React Academy นี้ได้ไหม

ได้ บทเรียน React Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ทำความเข้าใจ React Server Components
  2. ฮุก use() สำหรับทรัพยากรแบบอะซิงก์
  3. React Actions และ useActionState
  4. useOptimistic สำหรับการตอบสนองทันที
← กลับไปที่ React Academy