[TIL/React] 2023/10/06

์›๋ฏผ๊ด€ยท2023๋…„ 10์›” 6์ผ

[TIL]

๋ชฉ๋ก ๋ณด๊ธฐ
120/201

Dropdown Box ๐ŸŸข

App.js์—์„œ๋Š” 'Dropdown Example'์ด๋ผ๋Š” ์ œ๋ชฉ๊ณผ, Dropdown ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค. ๋™์‹œ์— options๋ผ๋Š” ๋ฐฐ์—ด์ด ์ƒ๋‹จ์— ์„ ์–ธ๋˜์–ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ Dropdown ์ปดํฌ๋„ŒํŠธ์— props๋กœ ์ „๋‹ฌํ•˜๊ณ  ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Dropdown.js์—์„œ๋Š” ์œ„ ๋‚ด์šฉ์„ returnํ•œ๋‹ค.

1) Dropdown Button

Dropdown Button์—์„œ๋Š” selectedOption์ด๋ผ๋Š” ์ƒํƒœ, ์ฆ‰ options ๋ฐฐ์—ด์˜ ํŠน์ • ์š”์†Œ๋ฅผ ๋ฒ„ํŠผ์˜ ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค€๋‹ค. ๋‹จ ||(๋˜๋Š”)์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์„ ํƒ๋œ option์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” "Select an option"์ด๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

๋™์‹œ์— onClick์— setIsOpen์ด๋ผ๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ ํ•จ์ˆ˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. isOpen์ด๋ผ๋Š” ์ƒํƒœ๋ฅผ true ๋˜๋Š” false๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ•˜์œ„ ์š”์†Œ์˜ ๋ Œ๋”๋ง์„ ์กฐ์ž‘ํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

2) Dropdown List

Dropdown List๋Š” isOpen์ด๋ผ๋Š” ์ƒํƒœ์— ์˜ํ•ด ํ†ต์ œ๋œ๋‹ค. Dropdown Button์„ ํด๋ฆญํ•ด์„œ isOpen์ด true๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด, styled component์— ์„ ์–ธ๋œ ๋Œ€๋กœ, ํ•˜์œ„ ์š”์†Œ(=Item)์„ block ๋‹จ์œ„๋กœ ๋ณด์—ฌ์ค€๋‹ค. ๋งŒ์•ฝ false๋ผ๋ฉด none์— ์˜ํ•ด ์•„๋ฌด ์š”์†Œ๋„ ๋ณด์ด์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

3) Dropdown Item

isOpen์ด true์ด๋ฉด block ๋‹จ์œ„๋กœ ๋ณด์—ฌ์ง€๋Š” Item์ด ๋ฐ”๋กœ ์œ„ ์ฝ”๋“œ์ด๋‹ค. ๋ฐฐ์—ด์˜ ์š”์†Œ์— ๋งž๋Š” ๋‚ด์šฉ์„ ๋ Œ๋”๋งํ•œ๋‹ค.

handleOptionClick ํ•จ์ˆ˜๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๋ฐ, ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ์ผ๋ถ€๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ๋ฒ„ํŠผ์— ๋ณด์—ฌ์งˆ selectedOption์˜ ์ƒํƒœ๋ฅผ ์ตœ์‹ ํ™”ํ•œ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ setIsOpenํ•จ์ˆ˜์— false๋ฅผ ์ „๋‹ฌํ•˜์—ฌ, ์˜ต์…˜ ์„ ํƒ ํ›„ Dropdown List๊ฐ€ ๊บผ์ง€๋„๋ก ํ•œ๋‹ค.

ํ™”๋ฉด ๐ŸŸข

profile
Write a little every day, without hope, without despair โœ๏ธ

0๊ฐœ์˜ ๋Œ“๊ธ€