คอมโพเนนต์แบบฟังก์ชันและ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- JSX: ไวยากรณ์และการแปลงโค้ด
- คอมโพเนนต์แบบฟังก์ชันและ Props
- Hook useState: สถานะและการเรนเดอร์ซ้ำ
- รายการ คีย์ และการเรนเดอร์ตามเงื่อนไข