เจาะลึกความแตกต่างในการทำงานระหว่าง template.tsx และ layout.tsx โดยเฉพาะพฤติกรรมการ Re-mount และการเก็บรักษา State
layout.tsx
template.tsx
useEffect จะทำงานใหม่ทุกครั้งที่เปลี่ยน Route
แม้ว่า Layout จะเป็นทางเลือกหลักในการทำโครงสร้าง UI (เพราะประสิทธิภาพดีกว่า) แต่ Template จะมีประโยชน์มากในกรณีเฉพาะเหล่านึ้:
เมื่อใช้ Library อย่าง Framer Motion และต้องการให้ Animation เล่นใหม่ทุกครั้งที่ผู้ใช้เปลี่ยนหน้า (Page Transitions)
เช่น การส่งข้อมูล Page View Analytics เมื่อโหลดหน้าใหม่, หรือการส่ง Logging ต่อการเปลี่ยนหน้า
เมื่อต้องการล้างค่าตัวแปร State (เช่น ฟอร์มแสดงความคิดเห็น) อัตโนมัติเวลาเปลี่ยนหน้า
หากในโฟลเดอร์มีทั้ง layout.tsx และ template.tsx โครงสร้างการ Render จะเป็น Layout ครอบ Template อีกทีหนึ่ง ดังโครงสร้างตัวอย่างด้านล่าง
ใน Next.js แนะนำให้ใช้ Layout เป็นค่าเริ่มต้นเสมอ เพราะมีประสิทธิภาพสูงกว่า (หลีกเลี่ยงการ Render ที่ไม่จำเป็น) และให้เปลี่ยนไปใช้ Template ต่อเมื่อคุณต้องการพฤติกรรมการ Re-mount เพื่อรีเซ็ต State/Effects จริงๆ เท่านั้น