<Disclosure> เป็นส่วนประกอบ (component) ที่มีประโยชน์มากใน React ช่วยให้คุณสร้างส่วนของ UI ที่สามารถเปิดและปิดได้ เช่น เมนูแบบ dropdown, accordion, หรือ panel ต่างๆ โดยมีการควบคุมสถานะการเปิด-ปิดอย่างชัดเจน
ทำไมต้องใช้ <Disclosure>?
- ง่ายต่อการใช้งาน: มี API ที่เข้าใจง่าย ทำให้คุณสร้างส่วนประกอบที่ซับซ้อนได้อย่างรวดเร็ว
- มีสถานะที่ชัดเจน: คุณสามารถควบคุมสถานะการเปิด-ปิดของส่วนประกอบได้อย่างง่ายดาย
- ปรับแต่งได้: คุณสามารถปรับแต่งรูปแบบและฟังก์ชันการทำงานของส่วนประกอบได้ตามต้องการ
- Accessibility: <Disclosure> มักถูกออกแบบมาให้เข้าถึงได้ (accessible) เพื่อให้ผู้ใช้ทุกคนสามารถใช้งานได้
โครงสร้างพื้นฐานของ <Disclosure>
โดยทั่วไป <Disclosure> จะประกอบด้วยส่วนประกอบย่อยหลัก 2 ส่วน คือ:
<Disclosure.Button>
: เป็นปุ่มที่เมื่อคลิกแล้วจะเปิดหรือปิดส่วนประกอบ<Disclosure.Panel>
: เป็นส่วนของเนื้อหาที่ซ่อนอยู่ และจะแสดงเมื่อเปิด <Disclosure>
ตัวอย่างการใช้งาน
import { Disclosure } from '@headlessui/react'
function MyComponent() {
return (
<Disclosure>
{({ open }) => (
<>
<Disclosure.Button>
<span>Toggle</span>
<span className="sr-only">open menu</span>
</Disclosure.Button>
<Disclosure.Panel>
<p>This is the hidden content.</p>
</Disclosure.Panel>
</>
)}
</Disclosure>
)
}
การทำงานของโค้ด
- นำเข้า
<Disclosure>
: นำเข้าส่วนประกอบ<Disclosure>
จากไลบรารี @headlessui/react - สร้าง
<Disclosure>
: สร้างองค์ประกอบ<Disclosure>
- ใช้
render props
: ภายใน<Disclosure>
เราจะใช้render props
เพื่อรับค่าopen
ซึ่งจะเป็นtrue
เมื่อส่วนประกอบถูกเปิด และเป็นfalse
เมื่อส่วนประกอบถูกปิด <Disclosure.Button>
: สร้างปุ่มที่เมื่อคลิกแล้วจะเปลี่ยนค่าของopen
<Disclosure.Panel>
: สร้างส่วนของเนื้อหาที่ซ่อนอยู่ และจะแสดงเมื่อopen
มีค่าเป็นtrue
การปรับแต่งเพิ่มเติม
- เพิ่มไอคอน: คุณสามารถเพิ่มไอคอนเข้าไปใน
<Disclosure.Button>
เพื่อบ่งบอกสถานะการเปิด-ปิด - เพิ่มคลาส CSS: คุณสามารถเพิ่มคลาส CSS เพื่อปรับแต่งสไตล์ของส่วนประกอบ
- เพิ่ม animation: คุณสามารถเพิ่ม animation เพื่อให้การเปิด-ปิดของส่วนประกอบดูเป็นธรรมชาติมากขึ้น
- ควบคุมสถานะจากภายนอก: คุณสามารถควบคุมสถานะการเปิด-ปิดของ
<Disclosure>
จากภายนอกได้โดยใช้ state management
สรุป
<Disclosure>
เป็นเครื่องมือที่มีประโยชน์มากสำหรับการสร้างส่วนประกอบแบบ interactive ใน React โดยเฉพาะส่วนประกอบที่ต้องการการเปิด-ปิด เช่น เมนู dropdown, accordion, หรือ panel ต่างๆ การเรียนรู้วิธีการใช้งาน <Disclosure>
จะช่วยให้คุณสร้าง UI ที่มีความยืดหยุ่นและใช้งานง่ายมากยิ่งขึ้น
หมายเหตุ: เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด ควรศึกษาเอกสารประกอบของไลบรารี @headlessui/react เพิ่มเติม
คำสำคัญ: <Disclosure>, React, component, UI, dropdown, accordion, panel, state, render props, accessibility