Framework/React

[React] MUI Popover, Menu ์†์„ฑ 'anchorEl' ๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์‚ฌ์šฉ ์ด์œ 

yuri lee 2024. 9. 4. 23:09
๋ฐ˜์‘ํ˜•

Intro

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์‹œ๊ฐ„์—๋Š” React MUI์—์„œ anchorEl ๋ž€ ๋ฌด์—‡์ด๋ฉฐ ์‚ฌ์šฉ ์ด์œ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

anchorEl ?

Material-UI (MUI)์—์„œ ํŒ์˜ค๋ฒ„(Popover)๋‚˜ ๋ฉ”๋‰ด(Menu)์™€ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†์„ฑ์œผ๋กœ, ํŒ์—…์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์†์„ฑ์€ ํŒ์—…์ด ์—ด๋ฆด ์œ„์น˜์˜ ๊ธฐ์ค€์ด ๋˜๋Š” ์š”์†Œ(Element)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

์ฃผ์š” ์ปดํฌ๋„ŒํŠธ์—์„œ์˜ anchorEl ์‚ฌ์šฉ

1. Popover

Popover ์ปดํฌ๋„ŒํŠธ๋Š” ๊ธฐ์ค€ ์š”์†Œ์ธ anchorEl์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ™”๋ฉด์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

<Popover
  open={Boolean(anchorEl)}
  anchorEl={anchorEl}
  onClose={handleClose}
>
  <Typography>The content of the Popover.</Typography>
</Popover>

 

2. Menu

Menu ์ปดํฌ๋„ŒํŠธ๋Š” ์ฃผ๋กœ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋˜๋Š” ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. anchorEl์„ ํ†ตํ•ด ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚  ์œ„์น˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

<Menu
  anchorEl={anchorEl}
  open={Boolean(anchorEl)}
  onClose={handleClose}
>
  <MenuItem onClick={handleClose}>Profile</MenuItem>
  <MenuItem onClick={handleClose}>My account</MenuItem>
</Menu>

 

anchorEl  ์‚ฌ์šฉ์ด์œ 

anchorEl์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํŒ์—… ์ปดํฌ๋„ŒํŠธ(Popover, Menu ๋“ฑ)๊ฐ€ ํ™”๋ฉด์—์„œ ์–ด๋””์— ์œ„์น˜ํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค.

1. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ ์ง๊ด€์ ์ธ ์œ„์น˜ ์ง€์ •: 

anchorEl์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•œ ์š”์†Œ(์˜ˆ: ๋ฒ„ํŠผ, ์•„์ด์ฝ˜)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํŒ์—…์ด ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ทธ ๋ฒ„ํŠผ ๋ฐ”๋กœ ์•„๋ž˜์— ๋ฉ”๋‰ด๊ฐ€ ์—ด๋ฆฌ๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŒ์—…์ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์œ„์น˜์— ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ๊ฒฝํ—˜์ด ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ๋งฅ ์œ ์ง€: ํŒ์—…์ด ํŠธ๋ฆฌ๊ฑฐ๋œ ์š”์†Œ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋‚˜ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ, ๊ทธ ์š”์†Œ์™€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ฐ€๊นŒ์šด ์œ„์น˜์— ํŒ์—…์ด ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. anchorEl์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์œ„์น˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. ์œ„์น˜ ์ œ์–ด์˜ ์œ ์—ฐ์„ฑ ๋™์ ์ธ ์œ„์น˜ ์„ค์ •: 

anchorEl์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒ์—…์˜ ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ™”๋ฉด์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์—ฌ๋Ÿฌ ์š”์†Œ๋ฅผ ํด๋ฆญํ•  ๋•Œ๋งˆ๋‹ค ํŒ์—…์ด ๊ทธ ์š”์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ์—์„œ ํŒ์—…์ด ์ ์ ˆํ•œ ์œ„์น˜์— ๋‚˜ํƒ€๋‚˜๋„๋ก ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€ ํ™”๋ฉด์—์„œ๋Š” ํŒ์—…์ด ํ™”๋ฉด์„ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๋„๋ก ํ•˜๊ฑฐ๋‚˜, ํฐ ํ™”๋ฉด์—์„œ๋Š” ์ง€์ •๋œ ์š”์†Œ์˜ ๊ทผ์ฒ˜์— ์ •ํ™•ํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

3. ๋ณต์žกํ•œ UI ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ ๋‹ค์–‘ํ•œ UI ์‹œ๋‚˜๋ฆฌ์˜ค ๋Œ€์‘: 

๋ณต์žกํ•œ UI์—์„œ๋Š” ํŒ์—…์˜ ์œ„์น˜๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ์š”์†Œ์— ๋Œ€ํ•ด ์ปจํ…์ŠคํŠธ ๋ฉ”๋‰ด๋ฅผ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, ํผ ์ž…๋ ฅ ์š”์†Œ ์˜†์— ์‹ค์‹œ๊ฐ„ ๋„์›€๋ง์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ anchorEl์€ ํŒ์—… ์œ„์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

anchorEl์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํŒ์—… ์ปดํฌ๋„ŒํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์š”์†Œ์™€ ์‹œ๊ฐ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ , ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ง๊ด€์ ์ด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, anchorEl์€ MUI์—์„œ ํŒ์—…์˜ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์†์„ฑ์œผ๋กœ์„œ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ  ๋‹ค์–‘ํ•œ UI ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•