๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋กreact (7)

Hi-๋žŒ๐Ÿ‘‹ High-๋žŒโ˜€๏ธ

[React] RadioButton ์ปค์Šคํ…€ํ•˜๊ธฐ with styled-components

๊ธฐ์กด Input์—์„œ ์ œ๊ณตํ•˜๋Š” RadioButton์—์„œ ์ƒ‰๋งŒ ๋ฐ”๊พธ๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ธ๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ์ž๋ฃŒ๋“ค์ด ๋งŽ์ง€ ์•Š์•˜๋‹ค. ์ปค์Šคํ…€ํ–ˆ๋‹ค๋Š” ๋‚ด์šฉ์„ ์‚ดํŽด๋ณด๋ฉด radio ํŠน์œ ์˜ ๋™๊ทธ๋ผ๋ฏธ 2๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ์–‘๋ณด๋‹ค, ์•„์˜ˆ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜์˜€๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜์ฒ˜๋Ÿผ ๊ณ ๋ฏผํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด RadioButton ์ปค์Šคํ…€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค! ๋จผ์ €, ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๋ชจ์–‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค. ๊ณ ๋ คํ•ด์•ผ ํ•  ์ ์€ ์„ ํƒ๋˜์—ˆ์„ ๋•Œ 1. ๋‚ด๋ถ€์— ๋™๊ทธ๋ผ๋ฏธ๊ฐ€ ์ƒ๊ฒจ์•ผ ํ•˜๋ฉฐ 2. icon์˜ ์ƒ‰๊ณผ label์˜ ์ƒ‰์ƒ์ด ๋ฐ”๋€Œ์–ด์•ผ ํ•œ๋‹ค ๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ๋ณด๋‹ค ๋‚˜๋Š” css์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ณ  ์žˆ์–ด์„œ, 1๋ฒˆ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ง‰๋ง‰ํ–ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ css์— ๋Œ€ํ•ด ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ฐ€์ƒ ์„ ํƒ์ž :after ์„ ํƒํ•œ..

React 2023. 10. 27. 17:40
[React] Toggle Component ๋งŒ๋“ค๊ธฐ

๋‚ด๊ฐ€ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์•Œ๋ฆผ ์„ค์ •์„ ์œ„ํ•ด ํ† ๊ธ€ ์Šค์œ„์น˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค. 1. ํ† ๊ธ€ ์Šค์œ„์น˜๋ž€? ๐Ÿ’ก ํ† ๊ธ€ ์Šค์œ„์น˜ ํ† ๊ธ€ ์Šค์œ„์น˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•„๋Š” ๋ฌผ๋ฆฌ์  ์Šค์œ„์น˜์ฒ˜๋Ÿผ "ON/OFF"์™€ ๊ฐ™์ด ๋‘๊ฐ€์ง€ ๋ฐ˜๋Œ€๋˜๋Š” ์ƒํƒœ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์œ„์น˜๋ฅผ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. 2. ํ† ๊ธ€ ์Šค์œ„์น˜ ๊ตฌํ˜„ ๊ฒฐ๊ณผ 3. ์ค‘์š” Point ๐ŸŒฑ props ์ด์šฉํ•˜๊ธฐ props๋กœ toggle์˜ ์ƒํƒœ(on/off)๋ฅผ ๋„˜๊ฒจ์ฃผ์–ด css ๋ถ€๋ถ„์—์„œ ์กฐ๊ฑด๋ถ€๋กœ ์Šคํƒ€์ผ๋ง์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. (ex) ${props => props.isToggleOn ? 'background-color: #7BAB6E' : 'background-color: #CECECE' }; ๐ŸŒฑ transition ์‚ฌ์šฉํ•˜๊ธฐ ํ† ๊ธ€ ๋ฒ„ํŠผ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์›€์ง์ผ..

React 2023. 7. 19. 23:59
[React] API ์„ค์ • ๊ณตํ†ตํ™” - ํ™˜๊ฒฝ๋ณ€์ˆ˜, axios ์ธ์Šคํ„ด์Šค ์‚ฌ์šฉํ•˜๊ธฐ

๊ธฐ์กด์—๋Š” API ์—ฐ๊ฒฐ์„ ์œ„ํ•ด์„œ proxy์„ค์ •์„ ํ•˜๊ณ  ํ˜ธ์ถœํ•  ๋•Œ endpoint ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ CORS์„ค์ •์ด ์™„๋ฃŒ๋˜๊ณ  ๋” ์ด์ƒ proxy๊ฐ€ ํ•„์š” ์—†๊ฒŒ ๋˜์–ด ์‚ญ์ œํ–ˆ๋”๋‹ˆ ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค ์ „์ฒด ์ฃผ์†Œ๋ฅผ ์ ์–ด์•ผ ํ–ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ axios ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณตํ†ต์ ์ธ ๋ถ€๋ถ„๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ–ˆ๋‹ค. 1. ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋จผ์ € ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์„ธํŒ…ํ•ด์คฌ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ง€๊ธˆ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฐ’๋“ค์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ๋„ ์žˆ๊ณ , ์ด ์™ธ์—๋„ ์—ฌ๋Ÿฌ ์žฅ์ ์ด ์žˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค์— ์˜ฌ๋ฆฌ๋ฉด ์•ˆ ๋˜๋Š” ๊ฐ’๋“ค์„ .envํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์‹ค์ œ ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •๋„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์„ฑ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋จผ์ € ํ”„๋กœ์ ํŠธ์˜ ์ตœ์ƒ์œ„ ๋ฃจํŠธ์— .envํŒŒ์ผ์„ ๋งŒ..

React 2023. 5. 8. 21:25
[React] SVGํŒŒ์ผ ์ƒ‰์ƒ ๋ณ€๊ฒฝํ•˜๊ธฐ

๋ฒ„ํŠผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค๋‹ค ๋ณด๋‹ˆ ํ…Œ๋งˆ์— ๋”ฐ๋ผ ์ด๋ฏธ์ง€์˜ ์ƒ‰์ƒ๋„ ๋ฐ”๊ฟ”์•ผ ํ–ˆ๋‹ค. SVGํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋งˆํฌ์—… ์–ธ์–ด๋กœ ํ‘œํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ‰์ƒ์„ ์‰ฝ๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค. 1 ) SVG ํŒŒ์ผ ์ˆ˜์ •ํ•˜๊ธฐ SVGํŒŒ์ผ์˜ ์ƒ‰์ƒ์„ ๋ฐ”๊พธ๋ ค๋ฉด ๋จผ์ € ์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ fill="none"์œผ๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ๋ถ€๋ถ„์„ fill="current"๋กœ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ๋ชจ๋“  fill์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ ๋ฐ”๊พธ๊ณ  ์‹ถ์€ svgํŒŒ์ผ์˜ ๊ฒฝ์šฐ fill์ด 2๊ตฐ๋ฐ ์žˆ์—ˆ๋‹ค. ํ•œ ๊ตฐ๋ฐ๋งŒ ๋ฐ”๊ฟจ์„ ๋•Œ๋Š” ์ž‘๋™์ด ์•ˆ ๋๋‹ค. 2 ) fill ์†์„ฑ ์ง€์ •ํ•˜๊ธฐ SVGํŒŒ์ผ์„ ์ˆ˜์ •ํ–ˆ์œผ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฐ€์„œ props๋ฅผ fill="#A0A0A0"์™€ ๊ฐ™์ด ์ง€์ •ํ•˜๋ฉด ์ƒ‰์ƒ์ด ๋ฐ”๋€๋‹ค. ๋‹ค๋งŒ ์—ฌ๊ธฐ์„œ๋„ ์ฃผ์˜ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค. SVGํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด img src๋ฅผ ์ด์šฉ..

React 2023. 3. 18. 02:08