Back to notes
mastery-frontend-react
Featured

React Under the Hood: Virtual DOM และ Reconciliation ทำงานยังไง?

ไม่ได้มีไว้ท่องจำ! เจาะลึกกลไกภายในของ React เข้าใจ Diffing Algorithm และ Fiber Architecture ว่าทำไม React ถึงเป็น Framework ที่ครองโลก พร้อมวิธีเขียนโค้ดให้สอดคล้องกับเครื่องยนต์หลัก

January 30, 20262 min read readNNexis by Seereen

🛑 1. The Problem First: "ทำไมเว็บถึงอืด ทั้งที่ใช้ React แล้ว?"

ลองนึกถึงวันที่คุณสร้างรายการข้อมูลขนาดใหญ่แล้วมีการอัปเดตบ่อยๆ:

HLJS TSX
// ❌ Naive Approach: เปลี่ยนโครงสร้าง UI แบบไม่คิด (Expensive Re-renders)
{isLoggedIn ? (
  <div className="user-dashboard"> <Content /> </div>
) : (
  <section className="guest-view"> <Content /> </section>
)}
// 🌋 พัง! แม้ <Content /> จะเหมือนเดิมเป๊ะ แต่เพราะคุณเปลี่ยนประเภท Tag
# จาก <div> เป็น <section> ทำให้ React ตัดสินใจ 'ทำลายคลังข้อมูลเก่าทิ้ง'
# และวาดใหม่ทั้้งต้นไม้ (Tree) ปัญหานี้จะทวีคูณถ้า Content ของคุณซับซ้อนครับ

ปัญหา: เรามักจะใช้ React ตามคู่มือโดยไม่รู้ว่าเบื้องหลังมันคือนักคณิตศาสตร์ที่กำลังคอยเปรียบเทียบ "โครงสร้าง" อยู่ทุุกวินาที การสั่งงานที่ขัดแย้งกับอัลกอริทึมพื้นฐานจะทำให้ React เสียทรัพยากรไปกับการวนลูปมหาศาลครับ


💡 2. Real-Life Analogy: การรีโนเวทบ้านตามพิมพ์เขียว

  • Virtual DOM: เหมือน "พิมพ์เขียว (Layout Plan)". ถ้าคุณอยากเปลี่ยนสีผนังบ้าน คุณไม่ต้องเอาค้อนไปทุบกำแพงจริงทุุกวัน คุณแค่แก้สีในแบบแปลน (JavaScript Object) ซึ่งทำได้เร็วมากและไม่ต้องจ่ายค่าแรงช่าง
  • Diffing Algorithm: เหมือน "วิศวกรที่คอยเทียบแปลนเก่ากับแปลนใหม่". เขาจะมองหาจุดต่างแค่ 2-3 จุดที่ต้องเปลี่ยนจริงๆ แล้วบอกช่างว่า "ไปทาสีเฉพาะตรงนี้นะ ไม่ต้องทุบบ้านใหม่" (ทำให้ DOM จริง ซึ่งมีราคาแพง ทำงานน้อยที่สุด)
  • Key (ID): เหมือน "รหัสพนักงานบนเสื้อ". ถ้าพนักงานสลับแถวกัน แต่ทุุกคนมีรหัสเดิม บรรณารักษ์จะรู้ทันทีว่า "อ๋อ นาย A แค่เดินไปอยู่หลังนาย B" แต่ถ้าคุณไม่มีรหัสพนักงาน (ใช้ Index) บรรณารักษ์จะคิดว่าทุุกคนหน้าใหม่หมด แล้วต้องนั่งสัมภาษณ์ (Re-render) ทุุกคนใหม่แต่ต้น!

🚀 3. Execution Journey: มหากาพย์การดีไซน์โค้ดตามกลไก Fiber

Senior จะเขียนโค้ดที่ช่วยให้ "วิศวกร (React)" ทำงานเปรียบเทียบข้อมูลได้ง่ายและเร็วที่สุด

🛠 Step-by-step:

  1. The Architecture Guard: รักษาลำดับและประเภทของ Tag ให้คงที่เสมอเพื่อเลี่ยงการ "Destroy & Re-create" ของ React
  2. The Key Protocol: ใช้ ID จากฐานข้อมูลเป็น key เสมอ (ห้ามใช้ Index!) เพื่อให้ React ย้ายตำแหน่ง DOM ได้รัดกุม
  3. The Component Granularity: แยกส่วนที่เปลี่ยนบ่อย (Dynamic) ออกจากส่วนที่นิ่ง (Static) เพื่อลดพื้นที่ในการเปรียบเทียบ (Diffing)
  4. The Fiber Awareness: เข้าใจว่า React 18+ (Fiber) สามารถ "หยุดพักงาน" ได้เพื่อไปทำสิ่งที่สำคัญกว่า (เช่น Input ของ User)
HLJS TSX
// ✅ Best Practice: การรักษาโครงสร้างเพื่อความเร็วสูงสุด
function UserStatus({ user }) {
  // สังเกตว่า <div> ยังคงอยู่ที่จุดเดิมเสมอ ไม่ว่าจะเป็นสถานะไหน
  return (
    <div className="container">
      {user ? <Dashboard data={user} /> : <GuestInfo />}
    </div>
  );
}

🪤 4. The Junior Trap: โรค "Index as Key"

จูเนียร์มักจะใช้ index ในการวนลูป (Map) ข้อมูล:

HLJS TSX
// ❌ Junior Trap: สร้างหายนะตอนมีการลบข้อมูล
items.map((item, index) => <li key={index}>{item.name}</li>)
// 🌋 พัง! ถ้าคุณลบข้อมูลตัวแรกทิ้ง ทุุกตัวที่เหลือจะถูกเปลี่ยน Index
# ซึ่งทำให้ React เข้าใจผิดว่า 'ข้อมูลเปลี่ยนทุุกบรรทัด'
# ผลคือนอกจากจะอึดแล้ว ยังอาจทำให้สถานะใน Input ของแต่ละบรรทัดสลับกันมั่วไปหมด!

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


⚖️ 5. The Why Matrix: Virtual DOM vs Real DOM

หัวข้อReal DOM (พังง่าย)Virtual DOM (Senior)
ความเร็วในการสร้าง🐢 ช้ามาก (ใช้ทรัพยากร Browser)🚀 เร็วฟ้าผ่า (แค่ JavaScript Object)
การจัดการข้อมูลจัดการยาก (ต้องสั่งทีละจุด)💎 ง่าย (แก้ไขที่สถานะกลาง)
การกินหน่วยความจำ🔋 สูง (ทุุกจุดคือ Node จริง)🔋 ต่ำสำหรับแอปที่มีขนาดเล็ก-กลาง
สรุปเหมาะกับหน้าเว็บนิ่งๆ แบบเก่ามาตรฐานสำหรับเว็บแอปยุคใหม่

🎓 6. Senior Mindset Summary

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

Share this note

Mission Accomplished

You've reached the end of this module. Time to apply these senior mindsets to your real-world projects!

Explore more topics

Related notes

View all notes
mastery-frontend-react
Basic

Modern Data Fetching: ทิ้ง Redux แล้วมาซบอก React Query

รู้จัก TanStack Query (React Query) อาวุธลับในการจัดการ Server State ที่จะทำให้โค้ด data fetching หายไป 90% พร้อมเทคนิคการจัดการ Cache และ Invalidation ขั้นเซียน

January 30, 20262 min read
mastery-frontend-react
Advanced

Advanced React Performance: ปรับแต่งเว็บให้ลื่นระดับ Senior

ปราบ Re-render ให้อยู่หมัดด้วยเทคนิคที่มากกว่าแค่การใช้ useMemo เจาะลึกความผิดพลาดที่จูเนียร์มักจะทำและการออกแบบ State ที่ประหยัดทรัพยากรที่สุด

January 30, 20262 min read
mastery-frontend-react
Advanced

React Hooks Mastery: เข้าใจกลไกและไขความลับระดับ Senior

ไม่ได้เป็นแค่ฟังก์ชัน! เจาะลึกกลไก Linked List เบื้องหลัง Hooks, วิธีแก้ปัญหา Stale Closure ที่ทำให้จูเนียร์กุมขมับ และการใช้ Memoization อย่างมีกลยุทธ์

January 30, 20263 min read

© 2026 My Notes by Seereen