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

ทำความเข้าใจคอมโพเนนต์ลำดับสูง (HOC)

ห่อคอมโพเนนต์เพื่อเติม prop ป้องกันเส้นทาง หรือเพิ่มการบันทึกการทำงานผ่านโรงงาน HOC

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

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

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

HOC คืออะไร

คอมโพเนนต์ลำดับสูงคือฟังก์ชันที่รับคอมโพเนนต์เป็นอินพุตและส่งคืนคอมโพเนนต์ใหม่ที่ได้รับการเพิ่มความสามารถ HOC จะเพิ่มพฤติกรรม เช่น พร็อพ การตรวจสอบการยืนยันตัวตน หรือการบันทึกการทำงาน โดยไม่แก้ไขคอมโพเนนต์เดิม
// HOC signature
function withEnhancement(WrappedComponent) {
  return function Enhanced(props) {
    // add behaviour here
    return <WrappedComponent {...props} extraProp="value" />;
  };
}

HOC สำหรับป้องกันการยืนยันตัวตน

HOC ที่ใช้กันทั่วไปจะเปลี่ยนเส้นทางผู้ใช้ที่ยังไม่ได้ยืนยันตัวตนไปยังหน้าเข้าสู่ระบบ คอมโพเนนต์เดิมไม่จำเป็นต้องรับรู้ตรรกะการยืนยันตัวตนเลย
function withAuth(Component) {
  return function AuthGuard(props) {
    const isLoggedIn = useAuth();
    if (!isLoggedIn) return <Navigate to="/login" />;
    return <Component {...props} />;
  };
}

const ProtectedPage = withAuth(DashboardPage);

HOC สำหรับบันทึกการทำงาน

HOC สามารถบันทึกการแสดงผลทุกครั้งพร้อมชื่อและพร็อพของคอมโพเนนต์เพื่อช่วยแก้ไขข้อบกพร่อง ให้ห่อหุ้มคอมโพเนนต์ใดก็ได้ด้วย withLogger เพื่อเพิ่มการติดตามการทำงาน
function withLogger(Component) {
  return function Logged(props) {
    console.log('[render]', Component.displayName, props);
    return <Component {...props} />;
  };
}

ส่งต่อพร็อพ

ให้กระจายพร็อพที่ได้รับทั้งหมดไปยังคอมโพเนนต์ที่ถูกห่อหุ้มด้วย `{...props}` เสมอ หากไม่ทำเช่นนี้ API ของคอมโพเนนต์เดิมจะเสียหาย
return function HOC(props) {
  return <WrappedComponent {...props} injectedProp={value} />;
};

กำหนด displayName

คอมโพเนนต์ที่ HOC ส่งคืนจะสูญเสียชื่อใน React DevTools ให้กำหนด displayName ที่สื่อความหมาย เพื่อให้คุณระบุคอมโพเนนต์นั้นในโครงสร้างต้นไม้ของคอมโพเนนต์ได้
function withAuth(Component) {
  function AuthGuard(props) { /* ... */ }
  AuthGuard.displayName = 'withAuth(' + (Component.displayName || Component.name) + ')';
  return AuthGuard;
}

ส่งต่อรีฟ

โดยค่าเริ่มต้น HOC จะขัดขวางรีฟ ให้ใช้ `React.forwardRef` ภายใน HOC เพื่อส่งต่อรีฟไปยังคอมโพเนนต์ที่ถูกห่อหุ้ม
function withStyle(Component) {
  return React.forwardRef(function (props, ref) {
    return <Component ref={ref} {...props} className="styled" />;
  });
}

HOC เทียบกับพร็อพสำหรับการเรนเดอร์และฮุก

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

นรกของตัวห่อหุ้ม

การใช้ HOC หลายรายการจะสร้างการซ้อนลึกในโครงสร้างต้นไม้ของคอมโพเนนต์ เช่น `withTheme(withAuth(withLogger(MyPage)))` DevTools จะแสดงชั้นตัวห่อหุ้มนิรนามจำนวนมาก ฮุกช่วยหลีกเลี่ยงปัญหานี้ได้ทั้งหมด

HOC ที่พบในไลบรารีต่าง ๆ

`connect()` ของ Redux, `withRouter()` ของ React Router v5 และ `observer()` ของ MobX ล้วนเป็น HOC การเข้าใจ HOC จะช่วยให้คุณทำงานกับ API รุ่นเก่าของไลบรารีเหล่านี้ได้

ตรวจสอบความเข้าใจ

คอมโพเนนต์ลำดับสูงต้องทำอะไรกับพร็อพที่ได้รับมาเสมอ

สรุปทบทวน

HOC คือฟังก์ชันที่รับคอมโพเนนต์และส่งคืนคอมโพเนนต์ที่เพิ่มความสามารถ HOC ใช้แทรกพร็อพ ป้องกันเส้นทาง และเพิ่มการบันทึกการทำงาน ให้กระจายพร็อพ กำหนด displayName และส่งต่อรีฟเสมอ ใน React สมัยใหม่ควรเลือกใช้ฮุก

บทถัดไป

บทเรียนถัดไป: **HOC เทียบกับพร็อพสำหรับการเรนเดอร์และฮุกแบบกำหนดเอง** — คุณจะเปรียบเทียบกลยุทธ์การแบ่งปันโค้ดทั้งสามแบบในด้านความอ่านง่าย การทดสอบ และการประกอบ

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

บทเรียน “ทำความเข้าใจคอมโพเนนต์ลำดับสูง (HOC)” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ทำความเข้าใจคอมโพเนนต์ลำดับสูง (HOC)”

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

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

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

บทเรียน “ทำความเข้าใจคอมโพเนนต์ลำดับสูง (HOC)” ใช้เวลานานแค่ไหน

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

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

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

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

  1. รูปแบบ Render Props
  2. ทำความเข้าใจคอมโพเนนต์ลำดับสูง (HOC)
  3. HOC กับ Render Props และ Custom Hooks
  4. การปรับโครงสร้าง HOC เป็น Custom Hook
← กลับไปที่ React Academy