π₯οΈReact, TypeScript, Tailwindλ‘ Dropdown ꡬννκΈ°
π μ 리β
π¬ κ°μβ
λ€μ΄λ² λΆμ€νΈμΊ νμ κ·Έλ£Ή νλ‘μ νΈλ₯Ό μ§ννλ©΄μ, Dropdown
μ»΄ν¬λνΈλ₯Ό ꡬννκ² λμλ€.
νμλΌλ©΄ React
λ₯Ό μ¬μ©ν΄μ HTML
λ‘ λλλ€μ΄μ ꡬννλ κ²μ²λΌ κ°λ¨νκ² κ΅¬ννκ² μ§λ§, νμ ν΅μ¬ κ°μΉλ μ¬μ©μ κ΄μ μμμ μμ±λ μκΈ°μ μ’ λ λν
μΌν ꡬνμ μλν΄λ³΄κ² λμλ€.
μ²μμλ λ¨μνκ² μ΄λ²€νΈ νλκ° μ λλ§ μΆκ°νκ³ , κ³΅ν΅ μ»΄ν¬λνΈλ§ λ½μλ΄λ©΄ λκ² μ§? λΌκ³ μκ°νλκ² unmount
μμ μ΄λ²€νΈλ₯Ό μ μ©νλ λ¬Έμ λ₯Ό λ§λκ³ λμ.. ν루μ’
μΌ κ³ λ―Όνκ³ νꡬνλ μμ
μ΄ λμ΄λ²λ Έλ€...
κ·Έλμ μ΄λ² κΈμμλ Dropdown
μ ꡬννλ©΄μ λ°°μ΄ κ²λ€κ³Ό λλΆμ΄μ unmount
μμ μ΄λ²€νΈλ₯Ό μ μ©νλ λ°©λ²μ λν΄ μ 리ν΄λ³΄λ € νλ€.
π― ꡬνμ λͺ©νβ

λ΄κ° ꡬνν΄μΌ νλ νμ΄μ§λ μμ κ°μλ€.

κ·Έλ¦¬κ³ μμ 보μ΄λ Dropdown
μ»΄ν¬λνΈκ° λ΄κ° ꡬννκ³ μ νλ μ»΄ν¬λνΈμλ€.
π€ ꡬνμ κ³ λ €ν΄μΌ νλ μ β
μμ λ§νλ―μ΄ μ°λ¦¬ νμ μ¬μ©μ κ΄μ μμμ μμ±λλ₯Ό μ€μμνκ³ μμλ€.
μ¬κΈ°μ λν΄μ κΈ°λ³Έμ μΈ νλ‘μ νΈ κΈ°κ° μ΄νμλ μ§μμ μΌλ‘ μ΄ νλ‘μ νΈλ₯Ό μ μ§λ³΄μνλ©΄μ λκ³ κ°κ³ μΆλ€λ μκ°μ΄ μμλ€.
μ΄μ λ°λΌμ λ€μμ μ¬νμ κ³ λ €ν΄μΌν νμκ° μμλ€.
- μλ²½νκ² κΉμ§λ μλλλΌλ, μ¬μ©μ κ΄μ μμ μκ°μ μΈ μμ±λλ κ°λ°κΈ°ν λ΄μμ μ΅λν κ³ λ €ν΄μΌ νλ€.
- νλ‘μ νΈ μ΄νμ μ μ§λ³΄μλ₯Ό μν΄μ μ»΄ν¬λνΈ κ΅¬μ‘°λ μ΅λν μκ² μͺΌκ°μΌ νλ€.
- μ»΄ν¬λνΈκ° μ¬μ¬μ© κ°λ₯νκ² λ§λ€μ΄μ ΈμΌ νλ€. (DX λ° νμ κ΄μ )
κ·Έλ κ² μ΄λ° μμΉμ λ°νμΌλ‘ κ°λ°μ μ§ννκ² λμλ€.
π€ λ΄κ° κ³ λ―Όνλ ꡬ쑰β

λ΄κ° κ³ λ―Όνλ ꡬ쑰λ μμ κ°μλ€.

μ΄λ₯Ό μ‘°κΈ λ λ―μ΄λ³΄λ©΄ μμ κ°μ κ΅¬μ‘°κ° λλ€.
μ΅λν μμ μ»΄ν¬λνΈλ‘ ꡬμ±νκ³ μ νμμΌλ©°, μ΄λ₯Ό λ°νμΌλ‘ ꡬννκ² λμλ€.
π€ μ¬μ¬μ© λ²μμ λν κ³ λ―Όβ
μ»΄ν¬λνΈλ₯Ό μκ² λλλ κ² κΉμ§λ μ’μλλ°, μ΄λ€μ μ΄λκΉμ§ μ¬μ¬μ©κ°λ₯νκ² ν κ²μΈκ°μ λν μλ¬Έμ΄ μκ²Όλ€.
μ²μμλ shadcnμ²λΌ ꡬνμ ν κΉ μκ°μ ν μλ€.
μ΅λν λ²μ©μ μΌλ‘ λ§λ€κ³ , λμ€μ νμν μ 보λ₯Ό λ°λ‘ μΈλΆμμ μ£Όμ
μ λ°κ² νλ μμΌλ‘ κ°κΉ νλ κ³ λ―Όμ΄ μμλ€.
λ€λ§, μ¬κΈ°μ ν κ°μ§κ° λ§μμ κ±Έλ¦¬κ² λμλ€. shadcn
μ μ§μ§ λ²μ©μ μΈ λͺ©μ μ κ°κ³ λμ¨ λΌμ΄λΈλ¬λ¦¬μ΄λ€. κ·Έλ¦¬κ³ λΉμ°νκ²λ μ΄κ² κ°λ°λκΈ°κΉμ§ μ λ§ λ§μ 컨νΈλ¦¬λ·°ν°λ€μ κΈ°μ¬κ° μμμ κ²μ΄λ€.
νμ§λ§, νλ‘μ νΈμμλ μ΄λ κ²κΉμ§ ν° λ²μ©μ±μ΄ νμνμ§ μμλ€. κ·Έλμ μ€μ λ‘ κΈ°νμ Figma
λ₯Ό μ΄ν΄λ³΄μκ³ , μ¬μ©λλ λΆλΆμ νμΈν μ μμλ€.


μμ λ κ²½μ°μμλ§ μ¬μ©λλ κ²μ νμΈν μ μμλ€.
μΆνμ λκ° μΆκ°μ μΈ μμκ° λ€μ΄μ¨λ€κ³ νμ§λ§, λͺ¨λ κ²½μ°λ₯Ό κ³ λ €νκΈ° 보λ€λ μ‘°κΈ λ μ’νμ λ€μκ³Ό κ°μ λ²μλ§ κ³ λ €νλ©΄ λ κ² κ°μλ€.
βΈ λ²νΌμ κ²½μ° μ¬λ¬ μ’ λ₯μ μμ΄μ½μ λμμ΄ λ μ μμ΄μΌ νλ€. λμκ°μ, κΈ°μ‘΄μ μμμ μν₯μ μ£Όλ©΄ μλλ€.
βΈ λ²νΌμ ν μ€νΈκ° λ€μ΄μμ λ λ°°μΉν΄μ€ μ μλλ‘children
μΌλ‘ λ°μμ μ²λ¦¬νλ λ‘μ§μ ꡬννλ€.
βΈ λλλ€μ΄ μμ΄ν μ μΈλΆλ‘λΆν° μ λ ₯λ°λλ€.
βΈ λλλ€μ΄ μμ΄ν μ λν μ΄λ²€νΈ μ²λ¦¬λ μΈλΆλ‘λΆν° μ λ ₯λ°λλ€. λ³Έ λλλ€μ΄μ wrapperμ λν μ΄λ²€νΈ νΈλ€λ¬λ§ μ λ ₯λ°λλ€. μ¬κΈ°μe.target.closest
μ κ°μ μ΄λ²€νΈ λ²λΈλ§ λ°©μ μ μ¬μ©νλ€.
βΈ λλλ€μ΄μμμ μΈλΆλ‘λΆν° λ°λ μ΄λ²€νΈλonClick
μλ§ μ μ©νλλ‘ νλ€.
βΈFigma
μ νμλ λμμΈμ μ λΆ κ΅¬ννλ€. μΆκ°λ‘ μ¬μ©μ νΈμμ±μ λν λΆλΆμ μ£Όμ΄μ§ κ°λ° κΈ°ν λ΄μ μ΅λν κ³ λ €νλ€.
μμ κ°μ μκ°μ κ°μ§κ³ κ°λ°μ μ°©μλ₯Ό νκ² λμλ€.
π§βπ» κ³μΈ΅ ꡬ쑰β
λλλ€μ΄μ ꡬννκΈ° μν΄ λ΄κ° κΎΈλ¦° κ³μΈ΅ ꡬ쑰λ λ€μκ³Ό κ°λ€.
/dropdown
- Dropdown
- Trigger
- Menu
- Item
μ¬μ€ μ²μλΆν° μ΄λ κ² λμ¨ κ²μ μλλ€.
λ΄ κ°λ° μμΉ μ€ νλμΈ 2λ² κ΅¬ννκΈ°
λΌλ κ² μλλ°.. μΌλ¨ λ¨Όμ λΉ λ₯΄κ² ꡬνμ ν΄λ³΄κ³ , κ·Έ λ€μμ λ€μ ꡬννλ©΄μ κ·Έλ μμ±λλ₯Ό λμ΄μλ λ§μΈλμ
μ΄λ€.
νλ κ°λ° κΈ°κ°μ μ λλ‘ λͺ»λ§μΆ°μ λ΄ λλ¦λλ‘ μΈμ΄ μμΉμ΄λ€.
μ¬μ€ μ²μλΆν° μ΄λ° κ΅¬μ‘°κ° λμλ κ²μ μλμλ€.
κΈ°μ‘΄μ Dropdown
μ HTML
μ΄λ Vanilla JS
λ±μΌλ‘ ꡬνλ§ ν΄λ΄€κ³ , React
μμλ λ§λ€μ΄μ§λ μ»΄ν¬λνΈλ₯Ό κ°μ Έλ€μΌμλ€.
μ΄μ λ°λΌ, μ²μ λ§λ€μ΄λ³΄κ² λλ κ²μ΄μκ³ .. νΈκΈ°λ‘κ² μμμ νμ§λ§.. μ¬μ¬μ©μ±μ΄ λκ² λ§λλ κ²μ΄ μκ°λ³΄λ€ μ½μ§ μμμ κΉ¨λ¬μλ€.




μλ λ΄κ° μ²μμ μμ±νλ μ½λλ€μ΄λ€. 보μ¬μ£ΌκΈ° λΆλλ¬μμ μΌλΆλ¬ κ΅μ₯ν μκ² νμλ₯Ό νλ€.

κ·Έλ¦¬κ³ μ΄μ λ°λ₯Έ ꡬ쑰λ μμ κ°μλ€.
κ·Έλ₯ 무ν±λκ³ μ§λ€λ³΄λ, λ μ€μ€λ‘λ μμ보기 μ΄λ €μ΄ μ§μ λΆν μ½λκ° λμλ€.
κ·Έμ λ°λΌμ, ꡬννλ κ²μ λ°νμΌλ‘ λ€μκΈ κ°μμμ νμκ° μμλλ° κ·Έκ² μμμ 보μ¬μ€ ꡬ쑰μ΄λ€.
μ΄ κ³Όμ μμ μ»΄ν¬λνΈ μ»΄νμ΄λ ν¨ν΄
μ΄ λμ§ μκ² λμκ³ , κ° μ»΄ν¬λνΈλ₯Ό μμ±μΌλ‘ λ겨μ μ¬μ©νλ λ°©λ²μ΄ μμμ λ°°μΈ μ μμλ€.