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

คอมโพเนนต์แบบฟังก์ชันและ Props

สร้างคอมโพเนนต์เป็นฟังก์ชัน รับและแยกโครงสร้าง props และใช้ PropTypes หรือชนิดข้อมูล TypeScript เพื่อบันทึกรูปร่างข้อมูลที่คาดหวัง

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

คอมโพเนนต์ React คืออะไร

คอมโพเนนต์ React คือฟังก์ชัน JavaScript ที่คืนค่า JSX คอมโพเนนต์เป็นส่วนประกอบพื้นฐานของแอปพลิเคชัน React ซึ่งเป็นส่วนติดต่อผู้ใช้ที่นำกลับมาใช้ใหม่และประกอบเข้าด้วยกันได้

function Welcome() {
  return <h1>Welcome to CoddyKit!</h1>;
}

// Arrow function style:
const Welcome = () => <h1>Welcome to CoddyKit!</h1>;

พร็อพส์ — การส่งข้อมูลลงไป

พร็อพส์ (คุณสมบัติ) คือวิธีส่งข้อมูลจากคอมโพเนนต์แม่ไปยังคอมโพเนนต์ลูก คอมโพเนนต์จะได้รับพร็อพส์เป็นอาร์กิวเมนต์แรกในรูปอ็อบเจ็กต์ธรรมดา

function Greeting({ name, role }: { name: string; role: string }) {
  return <p>Hello, {name}! Your role is {role}.</p>;
}

// Usage:
<Greeting name="Alice" role="admin" />

อินเทอร์เฟซ TypeScript สำหรับพร็อพส์

กำหนดอินเทอร์เฟซที่มีชื่อสำหรับพร็อพส์ เพื่อให้ได้รับการเติมโค้ดอัตโนมัติ การตรวจสอบชนิดข้อมูล และเอกสารประกอบ

interface ButtonProps {
  label: string;
  onClick: () => void;
  disabled?: boolean;
  variant?: 'primary' | 'secondary' | 'ghost';
}

function Button({ label, onClick, disabled = false, variant = 'primary' }: ButtonProps) {
  return (
    <button
      onClick={onClick}
      disabled={disabled}
      className={`btn btn-${variant}`}
    >
      {label}
    </button>
  );
}

พร็อพเนื้อหาย่อย

พร็อพ children มีเนื้อหาที่อยู่ระหว่างแท็กเปิดและแท็กปิดของคอมโพเนนต์ กำหนดชนิดข้อมูลเป็น React.ReactNode เพื่อรองรับเนื้อหาใด ๆ ที่สามารถแสดงผลได้

interface CardProps {
  title: string;
  children: React.ReactNode;
}

function Card({ title, children }: CardProps) {
  return (
    <div className="card">
      <h2>{title}</h2>
      <div className="card-body">{children}</div>
    </div>
  );
}

// Usage:
<Card title="Hello">
  <p>Card content goes here.</p>
</Card>

พร็อพส์เริ่มต้นด้วยการแยกโครงสร้าง

กำหนดค่าเริ่มต้นโดยตรงในรูปแบบการแยกโครงสร้าง วิธีนี้เป็นแนวทางสมัยใหม่ ส่วน API defaultProps ที่เลิกแนะนำแล้วไม่ควรใช้ต่อ

function Alert({ type = 'info', message, onClose }: AlertProps) {
  return (
    <div className={`alert alert-${type}`}>
      <span>{message}</span>
      <button onClick={onClose}>×</button>
    </div>
  );
}

การประกอบคอมโพเนนต์

คอมโพเนนต์สามารถประกอบกันได้ เช่น Page ใช้ Layout, Layout ใช้ Nav และ Sidebar และแต่ละส่วนก็ใช้ส่วนประกอบย่อยอย่าง Button และ Icon ต้นไม้ของคอมโพเนนต์นี้เรียกว่าต้นไม้คอมโพเนนต์ของ React

หลักการตั้งชื่อ

ชื่อคอมโพเนนต์ต้องขึ้นต้นด้วยตัวพิมพ์ใหญ่ ชื่อที่ขึ้นต้นด้วยตัวพิมพ์เล็กจะถูกมองว่าเป็นองค์ประกอบ HTML <div> คือ div ของ HTML ส่วน <Div> คือคอมโพเนนต์ React ที่ชื่อ Div

คอมโพเนนต์บริสุทธิ์

คอมโพเนนต์จะเป็น บริสุทธิ์ หากพร็อพส์ชุดเดิมให้ผลลัพธ์เดิมเสมอและไม่มีผลข้างเคียงเกิดขึ้นระหว่างการแสดงผล คอมโพเนนต์บริสุทธิ์ทำความเข้าใจและเพิ่มประสิทธิภาพได้ง่ายกว่า

// Pure:
const Greeting = ({ name }: { name: string }) => <h1>Hi, {name}</h1>;

// Impure (side effect in render):
const Bad = ({ id }: { id: string }) => {
  localStorage.setItem('id', id); // SIDE EFFECT in render — avoid
  return <p>{id}</p>;
};

การส่งฟังก์ชันเป็นพร็อพส์

ฟังก์ชัน (คอลแบ็ก) จะถูกส่งเป็นพร็อพส์เพื่อให้คอมโพเนนต์ลูกสื่อสารกลับไปยังคอมโพเนนต์แม่ คอมโพเนนต์แม่กำหนดฟังก์ชัน ส่วนคอมโพเนนต์ลูกเป็นผู้เรียกใช้

function TodoItem({ text, onDelete }: { text: string; onDelete: () => void }) {
  return (
    <li>
      {text}
      <button onClick={onDelete}>Delete</button>
    </li>
  );
}

การกระจายพร็อพส์

ตัวดำเนินการกระจายจะส่งพร็อพส์ทั้งหมดจากอ็อบเจ็กต์ไปยังคอมโพเนนต์ เหมาะสำหรับคอมโพเนนต์ที่ใช้ห่อหรือส่งต่อพร็อพส์ แต่ควรใช้อย่างระมัดระวัง เพราะอาจส่งพร็อพส์ที่ไม่คาดคิดต่อไปได้

function InputWrapper(props: React.InputHTMLAttributes<HTMLInputElement>) {
  return <input {...props} className={`input-base ${props.className || ''}`} />;
}

Fragment และคีย์ในบริบทพร็อพส์

เมื่อแสดงผลรายการคอมโพเนนต์ในฐานะเนื้อหาย่อย แต่ละรายการต้องมีพร็อพ key ที่ไม่ซ้ำกัน คีย์ช่วยให้ React ระบุได้ว่ารายการใดเปลี่ยนแปลง ถูกเพิ่ม หรือถูกลบ

ตรวจสอบอย่างรวดเร็ว

คุณจะกำหนดค่าเริ่มต้นให้พร็อพในคอมโพเนนต์ฟังก์ชัน React สมัยใหม่ได้อย่างไร

สรุป: คอมโพเนนต์และพร็อพส์

คอมโพเนนต์แบบฟังก์ชันคือฟังก์ชัน JavaScript ที่คืนค่า JSX พร็อพส์ใช้ส่งข้อมูลจากคอมโพเนนต์แม่ไปยังคอมโพเนนต์ลูก ใช้อินเทอร์เฟซ TypeScript กำหนดชนิดข้อมูลของพร็อพส์ ใช้ children: React.ReactNode สำหรับเนื้อหาในช่อง กำหนดค่าเริ่มต้นในการแยกโครงสร้าง ส่งคอลแบ็กเป็นพร็อพส์เพื่อให้ลูกสื่อสารกับแม่ ชื่อคอมโพเนนต์ต้องขึ้นต้นด้วยตัวพิมพ์ใหญ่

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

บทเรียน “คอมโพเนนต์แบบฟังก์ชันและ Props” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “คอมโพเนนต์แบบฟังก์ชันและ Props”

สร้างคอมโพเนนต์เป็นฟังก์ชัน รับและแยกโครงสร้าง props และใช้ PropTypes หรือชนิดข้อมูล TypeScript เพื่อบันทึกรูปร่างข้อมูลที่คาดหวัง คุณปฏิบัติ Frontend Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

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

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

บทเรียน “คอมโพเนนต์แบบฟังก์ชันและ Props” ใช้เวลานานแค่ไหน

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

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

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

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

  1. JSX: ไวยากรณ์และการแปลงโค้ด
  2. คอมโพเนนต์แบบฟังก์ชันและ Props
  3. Hook useState: สถานะและการเรนเดอร์ซ้ำ
  4. รายการ คีย์ และการเรนเดอร์ตามเงื่อนไข
← กลับไปที่ Frontend Academy