joooing 2021. 2. 21. 03:17
๋ฐ˜์‘ํ˜•

๐ŸŽ ์˜ค๋Š˜ ํ•œ ์ผ


โœ”๏ธ Hooks๋กœ CMarket๋งŒ๋“ค๊ธฐ
๋ผ์šฐํŒ…๊นŒ์ง€๋งŒ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ์‡ผํ•‘ ์•ฑ์ธ C market์„ ์™„์„ฑํ•˜๋Š” ์Šคํ”„๋ฆฐํŠธ์˜€๋‹ค. ์ƒํ’ˆ ํŽ˜์ด์ง€์—์„œ ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ๋‹ด๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์žฅ๋ฐ”๊ตฌ๋‹ˆ ํŽ˜์ด์ง€์— ํ•ด๋‹น ์ƒํ’ˆ์ด ๋‹ด๊ธฐ๊ณ , ๋˜๋‹ค์‹œ ๋ˆ„๋ฅด๋ฉด ์ˆ˜๋Ÿ‰๋งŒ ์˜ฌ๋ผ๊ฐ€๋„๋ก Hooks๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์žฅ๋ฐ”๊ตฌ๋‹ˆ์—์„œ ์ˆ˜๋Ÿ‰์„ ๋Š˜๋ฆฌ๊ณ  ์ค„์ผ์ˆ˜๋„ ์žˆ๊ฒŒ ํ•˜๊ณ , ์‚ญ์ œ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•œ๋ฒˆ์— ์‚ญ์ œ๋˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ๋“ค๋ฉด ๋‚ด ๋งˆ์Œ๋Œ€๋กœ ํ•จ์ˆ˜๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์„ ์ง“๊ณ , ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ตฌ์„ฑํ–ˆ์„ํ…๋ฐ ํ•จ์ˆ˜๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์ด ์ด๋ฏธ ์–ด๋Š์ •๋„ ์ •ํ•ด์ ธ์žˆ๋Š” ์ƒํƒœ์—์„œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋‹ค๋ณด๋‹ˆ๊นŒ ์˜คํžˆ๋ ค ํŒŒ์ผ์„ ํŒŒ์•…ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์„ ๋งŽ์ด ์Ÿ๊ฒŒ ๋˜์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ํ˜ผ์žํ–ˆ์ง€๋งŒ ๋ญ”๊ฐ€ ํ˜‘์—…์„ ํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ค๊ธฐ๋„ ํ–ˆ๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์งœ๋†“์€ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ํŒŒ์•…ํ•˜๋Š” ์—ฐ์Šต๋„ ๋œ ๊ฒƒ ๊ฐ™๋‹ค.

โœ”๏ธ React - ๋‰ด์Šค์•ฑ ๋งŒ๋“ค์–ด๋ณด๊ธฐ
Hooks์™€ ๋‰ด์ŠคAPI, react-router-dom ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์นดํ…Œ๊ณ ๋ฆฌ ๋ณ„๋กœ ๋‰ด์Šค๋ฅผ ๊ตฌ๋ณ„ํ•ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ๋‰ด์Šค ์•ฑ์„ ๋งŒ๋“ค์–ด๋ดค๋‹ค. ๋‰ด์Šค API๋ฅผ axios์™€ async/awiat๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ๋กœ ๋ฐ›์•„์˜ค๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ฐ›์•„์˜ค๊ธฐ ์ „๊นŒ์ง€๋Š” ๋กœ๋”ฉํŽ˜์ด์ง€๊ฐ€ ๋œจ๋„๋ก ํ–ˆ๋‹ค. ๋ฐ์ดํ„ฐ์— ์นดํ…Œ๊ณ ๋ฆฌ๋„ ํ•จ๊ป˜ ์žˆ์–ด์„œ url์˜ ์ฟผ๋ฆฌ๋ถ€๋ถ„๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ์‹์œผ๋กœ ๊ตฌ๋ถ„๋„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ „์— ์–ด์ฉŒ๋‹ค๊ฐ€ location ๊ฐ์ฒด์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ ๊ฒฝ๋กœ๋ฅผ ํŒŒ์•…ํ•  ๋•Œ ์ด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ํ™œ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๊ธฐ๋„ ํ•ด์„œ ์žฌ๋ฐŒ์—ˆ๋‹ค.

โœ”๏ธ Redux ๊ฐœ๋…
 ๊ธฐ์กด์—๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋ ค๋ฉด ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ํ•˜๊ณ , ์„œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ๋ฐ›๊ณ ..์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๊ณ .. ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…์„ ํ•ด์•ผ๋งŒ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ Redux๋ฅผ ์“ฐ๋ฉด ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋ฐ”๊นฅ์—์„œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ง์ ‘ ์จ๋ณด์ง€๋Š” ์•Š๊ณ  ์˜ค๋Š˜์€ ๊ฐœ๋…๋“ค์„ ์ญ‰ ํ›‘์–ด๋ดค๋‹ค. ์ผ๋‹จ ๋ฆฌ๋•์Šค๋ฅผ ์ ์šฉ์‹œํ‚ค๋ฉด ์ƒํƒœ ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋“ค์ด ๋ชจ๋‘ ๋‹ด๊ธด '์Šคํ† ์–ด'๋ผ๋Š”๊ฒŒ ์ƒ๊ธด๋‹ค. ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‘ ์—ฌ๊ธฐ์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ƒˆ ์ƒํƒœ๊ฐ€ ์ƒ๊ธฐ๋Š” ๊ณผ์ •์€ ๊ณต์‹์ฒ˜๋Ÿผ ์•Œ์•„๋‘ฌ์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. Action๊ฐ์ฒด → Dispatch์—๊ฒŒ ์ „๋‹ฌ → Reducerํ˜ธ์ถœ → ์ƒˆ๋กœ์šด state์ƒ์„ฑ! ์ด๋Ÿฐ ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ ๋Œ€์ถฉ ๋Š๋‚Œ๋งŒ ์•Œ ๊ฒƒ ๊ฐ™์•„์„œ ์–ผ๋ฅธ ์ง์ ‘ ํ•ด๋ณด๋ฉด์„œ ์ œ๋Œ€๋กœ ์•Œ์•„์•ผ๊ฒ ๋‹ค.

 

๐ŸŽ ๊ธฐ์–ตํ•  ๊ฒƒ


โœ”๏ธ <picture /> ํƒœ๊ทธ
background-image๊ฐ€ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ธ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•„๋‹ˆ์–ด์„œ ์•ฝ๊ฐ„ ์ถฉ๊ฒฉ์ ์ด์—ˆ๋‹ค.. img๋‚˜ picture ํƒœ๊ทธ์™€ object-fit ์†์„ฑ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ˜์‘ํ˜• ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ์—๋„, ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋„ ์ข‹๋‹ค๊ณ  ํ•œ๋‹ค. ์ฝ˜ํ…์ธ  ์ด๋ฏธ์ง€๋ฅผ ์žฅ์‹์ด ์•„๋‹Œ ์˜๋ฏธ์žˆ๋Š” HTML ์ปจํ…์ธ  ์ด๋ฏธ์ง€ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด img, picture ํƒœ๊ทธ๋ฅผ ์“ฐ์ž!

โœ”๏ธ JSON.stringify ์˜ต์…˜
JSON.stringify(value[, replacer[, space]])
space : ๊ฐ€๋…์„ฑ ๋ชฉ์  JSON ๋ฌธ์ž์—ด ์ถœ๋ ฅ์— ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” String ๋˜๋Š” Number ๊ฐ์ฒด
- Number๋ฉด ๊ณต๋ฐฑ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” space ์ˆ˜, 1~10๊ฐ’
- String์ด๋ฉด ๊ทธ ๋ฌธ์ž์—ด์ด ๊ณต๋ฐฑ์œผ๋กœ ์‚ฌ์šฉ๋จ

โœ”๏ธ styled-components ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
Javascript ์•ˆ์— CSS๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ๋ฐ, template literal์„ ์จ์„œ ์ค‘๊ฐ„์ค‘๊ฐ„ ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์‹๊ฐ™์€ ๊ฒƒ๋„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ , ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ์„ ์ฝ์–ด์˜ฌ ์ˆ˜๋„ ์žˆ๋‹ค. const Component = styled` background-color: ${props => props.color}; `; ์ด๋Ÿฐ์‹์œผ๋กœ! ์ง„์งœ CSS + Javascript๋ผ ๊ฐ„๋‹จํ•œ ์†์„ฑ์€ ์ด๊ฑธ๋กœ ์ง€์ •ํ•ด๋„ ๋”ฐ๋กœ CSSํŒŒ์ผ์„ ์“ฐ์ง€ ์•Š์•„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

๐ŸŽ ๋” ๊ณต๋ถ€ํ•  ๊ฒƒ


โœ”๏ธ Redux ์˜ˆ์ œ ์ฐพ์•„๋ณด๊ธฐ, ๋ธ”๋กœ๊น…
๋ฐ˜์‘ํ˜•