๊ฐœ๋ฐœ/React

ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” ์™œ ์ค‘์š”ํ•œ๊ฐ€์š”? ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ํ•  ๋•Œ, ํ˜น์€ ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜์ง€ ์•Š์•„๋„ ์ค‘์š”ํ•œ ์กด์žฌ์ž…๋‹ˆ๋‹ค. ๋ฆฌํŒฉํ† ๋ง์„ ํ•  ๋•Œ์—๋Š” ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์งœ๋‘๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ํ•˜๋ฉด ํ•˜๊ธฐ ์ „๊ณผ ํ›„์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ์—๋„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ๋“ค์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด ์œ ์ง€๋ณด์ˆ˜ํ•  ๋•Œ ์˜ˆ์ƒ์น˜ ๋ชป ํ•œ ์—๋Ÿฌ๋“ค์„ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ์„œ์ ์—์„œ๋„ ์ด ์ค‘์š”์„ฑ์„ ๊ต‰์žฅํžˆ ๊ฐ•์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. React Testing Library๋Š” ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„์‚ฌํ•ญ๋ณด๋‹ค๋Š” ์‹ค์ œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๋ฅผ ๊ถŒ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ div ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋ณด๋‹ค div ํ…Œ๊ทธ์˜ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์— ์ž˜ ๋…ธ์ถœ..
โ—พ i18n ์‹œ์ž‘ํ•˜๊ธฐ ์›น์‚ฌ์ดํŠธ ํ˜น์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. ์•„๋ž˜์˜ ๊ณต์‹ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ๋” ๋งŽ์€ ์ด์•ผ๊ธฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€๋งŒ ์ •๋ฆฌํ•ด ๋ณผ ์˜ˆ์ •์ด๋‹ค. ๊ณต์‹ ์›นํŽ˜์ด์ง€ ๐Ÿ‘‰ https://react.i18next.com/getting-started ์„ค์น˜ํ•˜๊ธฐ npm install react-i18next i18next --save โ—พ ์ ์šฉํ•˜๊ธฐ ๋ณดํ†ต ํŒŒ์ผ ํ•˜๋‚˜์— ๋‹ค ์ ์€ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋“ค์ด ๋งŽ์•„์„œ ์กฐ๊ธˆ ํ—ค๋งธ๋Š”๋ฐ, ์šฐ์„  ๋Œ€๋ถ€๋ถ„ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ๋•Œ ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋นผ์„œ ๋ถ„๋ฆฌํ•ด๋‘๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋„ ๊ทธ๋ ‡๊ฒŒ ํ–ˆ๋‹ค. src ํด๋” ์•„๋ž˜์— language ๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ i18n.js๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์˜์–ด๋ฒ„์ ผํ•˜๊ณ  ํ•œ๊ตญ์–ด ๋ฒ„์ ผ๋งŒ ์žˆ์œผ๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์— ๋ฒˆ์—ญ ์Šคํฌ๋ฆฝํŠธ๋Š” en...
React-Query React app์—์„œ ๋น„๋™๊ธฐ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ฒŒ ํ•ด์ฃผ๋Š” data fetching ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. "์ „์—ญ ์ƒํ…Œ"๋ฅผ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ ๋„ React ๋ฐ React-Native ์•ฑ์—์„œ ์„œ๋ฒ„์˜ ๊ฐ’์„ ํด๋ผ์ด์–ธํŠธ์— ๊ฐ€์ ธ์˜ค๊ณ  ์บ์‹œํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋ฒ„ ์ƒํƒœ์˜ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์™€ ์žฅ์• ๋ฌผ์„ ๊ทน๋ณตํ•˜๊ณ  ์•ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์•ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์„œ๋ฒ„๋กœ ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ๋กœ์ง์„ store ๋‚ด๋ถ€์— ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด store๋Š” ํด๋ผ์ด์–ธํŠธ state๋ฅผ ์œ ์ง€ํ•ด์•ผํ•˜๋Š”๋ฐ, ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ์™€ ํด๋ผ์ด์–ธํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์กดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.(redux๊ฐ€ ๊ทธ๋Ÿฌํ•จ..) ์ด๋Ÿฐ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์”๋‹ˆ..
* ๋ฉด์ ‘์—์„œ ๋ฐ›์•˜๋˜ ์งˆ๋ฌธ์ธ๋ฐ, ๋‹ต์€ ๊ณ ์‚ฌํ•˜๊ณ  ์งˆ๋ฌธ ์ž์ฒด๋ฅผ ์ดํ•ด ๋ชป ํ•  ์ •๋„์˜€์œผ๋‹ˆ, ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๊ฐœ๋…์ด์˜€์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ฅ Custom Hooks ๋‘ ๊ฐœ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์—์„œ ๊ฐ™์€ ๋กœ์ง์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์™€ Hook ๋˜ํ•œ ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค - ์ด์ƒ ๊ณต์‹ ์ž๋ฃŒ์— ๋‚˜์˜จ ์„ค๋ช…์ธ๋ฐ, ์•„์ง ์ดํ•ดํ•˜๊ธฐ์—๋Š” ๋ถ€์กฑํ•œ ์„ค๋ช… ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” ํ›… ํ™œ์šฉ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ•˜๋‚˜๋กœ ์ค„์—ฌ์คŒ์œผ๋กœ์จ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ณด๊ธฐ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ custom hooks์ž…๋‹ˆ๋‹ค ์ด๋ฆ„์€ use๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. custom hook์€ ๋‹ค๋ฅธ hook์„ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค custom hook์€ ์กฐ๊ฑด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ์—ญ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ์ข‹์„ ๊ฑฐ..
useEffect render ๋ Œ๋”(render)๊ฐ€ ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š”(paint) ํ›„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ paint ๋œ ํ›„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€์— DOM์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ํ™”๋ฉด์˜ ๊นœ๋นก์ž„์„ ๋ณด๊ฒŒ ๋œ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๋ถ€ ์ƒํƒœ๋ฅผ ์ฆ‰์‹œ ๋ฐœ์ƒํ•  ํ•„์š”๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ํŽ˜์ด์ง€์— ์‹œ๊ฐ์ ์œผ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ๋™๊ธฐํ™” ํ•  ๊ฒฝ์šฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋‹ฌ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์งˆ ๋•Œ ์ผ๋ถ€ ์ƒํƒœ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ useLayoutEffect render ๋ Œ๋”๋ง ํ›„ ํ™”๋ฉด์ด ์—…๋ฐ์ดํŠธ ๋˜๊ธฐ ์ „์— ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ paint๊ฐ€ ๋˜๊ธฐ ์ „์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— DOM์„ ์กฐ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž๋Š” ๊นœ๋นก์ž„์„ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š๋Š”๋‹ค ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋  ๋•Œ ์š”์†Œ๊ฐ€ ๊นœ๋ฐ•์ด๋Š” ๊ฒฝ์šฐ DOM์„..
React๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ณ  Vue๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์ผ๋‹ค๊ฐ€ ๋บ๋‹ค๊ฐ€ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ถ€๋ถ„์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ถ€๋ถ„์ ์ธ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€์„œ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ์ง€์›ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์— ๋”ฐ๋ผ์„œ ์ž‘์„ฑํ•ด์ค˜์•ผ ์ œ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ React๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์œ ๋กญ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์ด๊ณ , Vue๋Š” vue์—์„œ ์ง€์ •ํ•ด์ค€ ๋ฌธ๋ฒ• ๋ฐฉ์‹์œผ๋กœ๋งŒ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๊ฐ€ ์ž์œ ๋„๊ฐ€ ๋” ๋†’๋‹ค๊ณ  ํ•˜๋Š” ๋ถ€๋ถ„์ด ์ด๋Ÿฐ ํƒœ์ƒ์ ์ธ ๋ถ€๋ถ„์—์„œ ์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค Virtual Dom(๊ฐ€์ƒ๋”)์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜์‘์ ์ด๊ณ  ์กฐํ•ฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ  ์žˆ๊ณ  ๋ผ์šฐํŒ… ๋ฐ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ปดํŒจ๋‹ˆ์–ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ..
์•Œ๊ณ ๋ณด๋ฉด ๋„˜๋‚˜ ์œ ์šฉํ•œ ์‚ฌ์ดํŠธ์ธ Netlify! ์ฃผ๋กœ ํ˜ธ์ŠคํŒ…์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ผ๋Š”๋ฐ, netlify dev ๋ผ๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์–ด์„œ ๋ฐฑ์—”๋“œ๋ถ€๋ถ„๊นŒ์ง€ ์‚ด์ง ๋„์™€์ค„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. dev ๊ธฐ๋Šฅ์„ ์•Œ๊ฒŒ ๋œ์ง€ ์–ผ๋งˆ ์•ˆ ๋˜์„œ ๊นŠ์ด ๊ณต๋ถ€๋ฅผ ์•„์ง ๋ชป ํ–ˆ์ง€๋งŒ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Œ ใ…Ž ์˜ค๋Š˜์€ react netlify ๋ฐฐํฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž! Netlify ( https://app.netlify.com/ ) 1. ๊ณ„์ •์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค ์ด๋ฉ”์ผ๋กœ๋„ ๊ณ„์ •์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ git๊ณผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. git ๊ณ„์ •์ด ์žˆ๋‹ค๋ฉด ์†์‰ฝ๊ฒŒ ๊ณ„์ •์„ ๋งŒ๋“œ์‹ค ์ˆ˜ ์žˆ์–ด์š” 2. ์ƒ๋‹จ ๋ฉ”๋‰ด์˜ [Sites] ๋‚˜ [new site from git] ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. netlify๋กœ ๋ฐฐํฌํ•˜๋Š”๊ฒŒ ๋ฌด๋ฃŒ๋ผ๋Š” ์ด์ ๋„ ์žˆ์ง€๋งŒ, git์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐ”๋กœ..
React.js๋ฅผ ์“ธ ๋•Œ ์ •๋ง ๋งŽ์ด ์“ฐ๋Š” hook ์ค‘์— ํ•˜๋‚˜์ธ useState ๊ธฐ๋ณธ ์ค‘์˜ ๊ธฐ๋ณธ์ž…๋‹ˆ๋‹ค. ์ผ๋‹จ hook์ด๋ž€ ๋ฌด์—‡์ด๋ƒ?! Hook์€ ํŠน๋ณ„ํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด useState๋Š” state๋ฅผ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋‹ค๋ฅธ Hook๋“ค์€ ๋‚˜์ค‘์— ์‚ดํŽด๋ด…์‹œ๋‹ค! ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ค‘ state๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋กœ ๋ฐ”๊พธ๊ณค ํ–ˆ์„ ๊ฒ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ œ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ Hook์„ ์ด์šฉํ•˜์—ฌ state๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์•„์ฃผ ๊ฐ„๋‹จํ•˜๋‹ต๋‹ˆ๋‹ค. ์•„์ฃผ ๊ฐ„๋‹จํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค Birthday Reminder ๋ผ๋Š” ์ปจ์…‰์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 5๋ช… ๊ฐ€๋Ÿ‰์˜ ์‚ฌ๋žŒ ํ”„๋กœํ•„์ด ํ•„์š”ํ•ด์„œ ๋ ˆ๋“œ๋ฒจ๋ฒณ ๋ฉค๋ฒ„๋“ค ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๊ธ..
์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ API๋ฅผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณดํ†ต fetch API ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฆฌ์•กํŠธ๋„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์ด๊ธฐ๋•Œ๋ฌธ์— fetch๋ฅผ ์‚ฌ์šฉํ•ด์„œ API ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฆฌ์•กํŠธ๋ฅผ ์“ธ ๋• Axios๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. API๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ธฐ ์œ„ํ•ด์„œ axios๋ฅผ ์จ๋ณด์ž! #Axios ๋‹ค์šด๋ฐ›๊ธฐ 1๏ธโƒฃ cmd ํ˜น์€ ์ฝ”๋“œ์—๋””ํ„ฐ ํ„ฐ๋ฏธ๋„์„ ์ด์š”ํ•ด์„œ axios๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค npm i axios ์„ค์น˜๊ฐ€ ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด Package.json ์„ ํด๋ฆญํ•ด๋ณด์‹œ๋ฉด ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์–ด์š”. ์•ˆ์— axios๊ฐ€ ์žˆ๋‹ค๋ฉด ์„ค์น˜์™„๋ฃŒ! 2๏ธโƒฃ์ฝ”๋“œ๋ฅผ ์“ฐ๊ณ  ์žˆ๋Š” ํŒŒ์ผ์— import ํ•ด์ฃผ๊ธฐ axios๋ฅผ ์“ธ ๊ณณ์— ๊ผญ import๋ฅผ ํ•ด์ค˜์•ผ ์“ธ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค 3๏ธโƒฃaxios๋ฅผ ์“ฐ๋Š”๋ฐ..
๋ฆฌ์•กํŠธ๋กœ ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ์ด ๊ฒŒ์‹œํŒ์— ๋“ค์–ด๊ฐ€๋Š” ๊ธฐ๋Šฅ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ฑ๋กํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค๊ณ  ๋ฉ”์ธ ํŽ˜์ด์ง€๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผํ•ด์„œ router์„ ์จ์•ผํ–ˆ๋‹ค. React Router ๋ฆฌ์•กํŠธ๋Š” SPA (Single Page Application) ๋ฐฉ์‹์œผ๋กœ์จ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ธฐ์กด์˜ MPA ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€ ์•ˆ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๋Š” ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ•˜๋‚˜์˜ html ํŒŒ์ผ์—์„œ ํšŒ์›์ถ”๊ฐ€ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ํด๋ฆญ์‹œ html์ด ๋ฐ”๋€Œ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํšŒ์›์ถ”๊ฐ€.js๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ Œ๋”๋งํ•ด์˜ค๋Š” ๋ฐฉ์‹์ด SPA์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ react-router๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
JavaScript๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์–ด๋Š ์ •๋„ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์ž ์ด๊ฒƒ์ €๊ฒƒ ํ”„๋กœ์ ํŠธ๋ฅผ ๋” ๋งŒ๋“ค์–ด๋ณด๊ณ , ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋ฆฌ์•กํŠธ์—๋„ ์†์„ ๋Œ”๋‹ค. React(๋ฆฌ์•กํŠธ)๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŒ๋“ ๊ฑด๋ฐ, ์ž‘๋…„๊นŒ์ง€๋งŒ ํ•ด๋„ ๊ต‰์žฅํžˆ ํ•ซํ–ˆ๋Š”๋ฐ, ์š”์„ธ๋Š” ๋˜ ๋‹ค๋ฅธ๊ฒŒ ํ•ซํ•˜๋”๋ผ. ํ•˜์ง€๋งŒ ์–ด์ฉ” ์ˆ˜ ์—†๋‹ค ์ผ๋‹จ. ๋‚˜๋Š” ๋ฆฌ์•กํŠธ ๋ฐฐ๋ฅผ ํƒ”๋‹ค. ์‚ฌ์‹ค ๊ทธ๋ƒฅ ์›นํŽ˜์ด์ง€๋Š” HTML, CSS ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํŽ˜์ด์ง€๊ฐ€ ์ ์  ๋Š˜์–ด๋‚˜๊ณ , ๋™์ ์ธ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ์›น์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์š”์ฆ˜์€ ๋‹จ์ˆœํ•œ ์›น์ด ์•„๋‹ˆ๋ผ, ๋ชจ๋ฐ”์ผ์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ์œ ๋™์ ์ธ ๊ฑธ ์ข‹์•„ํ•˜๋‹ค๋ณด๋‹ˆ ์ด๋Ÿด ๋•Œ, ๋ฆฌ์•กํŠธ๊ฐ€ ์ •๋ง ..
๋ฐ(Ming) ๐Ÿฐ
'๊ฐœ๋ฐœ/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)