React

[TIL/React] 2023/10/06

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

2023๋…„ 10์›” 6์ผ1min read

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๊ฐ€ ๊บผ์ง€๋„๋ก ํ•œ๋‹ค.

ํ™”๋ฉด ๐ŸŸข

More to read

REST API

ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ ์‚ฌ์ด

HTTP ์ƒํƒœ ์ฝ”๋“œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ฐฑ์—”๋“œ๋กœ ๋ณด๋ƒˆ๋˜ ์š”์ฒญ์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ผ์ข…์˜ ์•ฝ์†์ด๋ฉฐ, API๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ƒํƒœ ์ฝ”๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ, ๋ฐฑ์—”๋“œ๋Š” ์ž˜ ๋ชจ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ์˜ ์Šฌํ”ˆ ์‚ฌ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.์•„๋ž˜๋Š” ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์Œ์—๋„, ๋ฐฑ์—”๋“œ์—์„œ ์ƒํƒœ ์ฝ”๋“œ

JWT

ํ† ํฐ ๊ด€๋ฆฌ ๋ฐฉ์‹ ํ†บ์•„๋ณด๊ธฐ

0. ๋“ค์–ด๊ฐ€๋ฉฐ ๐ŸŽฏ ์„œ๋น„์Šค์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์‚ฌ์šฉ์ž ์ธ์ฆ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์–ด์ง„ ๊ถŒํ•œ์„ ํ™•์ธํ•˜๋Š” ์ž‘์—…์€ ์ธ๊ฐ€๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ธ๊ฐ€๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ธ์ฆ์—๋Š” ๋งŽ์€ ๋ฐฉ์‹์ด ์žˆ์ง€๋งŒ, ์˜ค๋Š˜์€ ์„ธ์…˜ ์ธ์ฆ ๋ฐฉ

A2A

A2A / MCP ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜

0. ๋“ค์–ด๊ฐ€๋ฉฐ โœ๏ธ Google for Developers์—, ๋ ˆ์Šคํ† ๋ž‘ ๊ณต๊ธ‰๋ง ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ์—ฎ์€ 6๋Œ€ ํ”„๋กœํ† ์ฝœ(MCP, A2A, UCP, AP2, A2UI, AG-UI)์— ๋Œ€ํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ๊ฒŒ์‹œ๋œ ์ดํ›„, MCP์™€ A2A๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ