๊ฐœ๋ฐœ/React

ํ˜„์žฌ ์ž‘์—… ์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ›์€ ์ฝ”๋“œ ํ”ผ๋“œ๋ฐฑ์„ ์ •๋ฆฌํ•˜๋‹ค๊ฐ€ useMemo๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ดค๋‹ค. ๋ฆฌ์•กํŠธ๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ๋กœ ์ผํ•˜๋ฉด์„œ ๋ฉด์ ‘๋•Œ๋‚˜ ๋งˆ์ฃผํ•˜๋˜ useMemo๋ผ๋Š” ๋ฆฌ์•กํŠธ ํ›…. useMemo ? ๋ฆฌ์•กํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™” ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์•กํŠธ ํ›…์ด๋‹ค. ์–ด๋–ป๊ฒŒ ์ปดํฌ๋„ŒํŠธ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ฃผ๋Š”๋ƒํ•˜๋ฉด์€ ๋ณดํ†ต ์˜ˆ์‹œ๋กœ ์—ฐ์‚ฐ์ž‘์—…์„ ๋งŽ์ด ๋“ ๋‹ค. ๊ณ„์†ํ•ด์„œ ๋™์ผํ•œ ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚˜๋Š” ์ž‘์—…์—๋Š” ์ƒˆ๋กœ ์ฒ˜์Œ๋ถ€ํ„ฐ ์—ฐ์‚ฐํ•  ํ•„์š”์—†์ด ๋””ํŽœ๋˜์‹œ๊ฐ€ ์žˆ์œผ๋ฉด ๋จผ์ € ํ˜„์žฌ ์˜์กด๊ฐ’๊ณผ ์ด์ „์˜ ์™ธ์กด๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋™์ž‘์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ ๊ธฐ์กด์˜ ๊ฐ’์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๊ฑฐ๊ธฐ์„œ ๋ถ€ํ„ฐ ์—ฐ์‚ฐ์„ ์‹œ์ž‘ํ•œ๋‹ค. ๋ฉ”๋ชจ๋œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.์บ์‹œ๋Š” ๋ฉ”๋ชจ๋œ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ํ‚ค์™€ ์ข…์†์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’..
์ด๋ฒˆ์—” ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋ž์„ ๊ตฌํ˜„ํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋„ ๊ตฌํ˜„ํ–ˆ๋˜ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ๊ฑด ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€ ์ ์–ด๋‘” ์ฝ”๋“œ๋ฅผ ์นดํ”ผ ์•ค ํŽ˜์ด์ŠคํŠธ ํ–ˆ๋˜์ง€๋ผ๐Ÿ˜… (์–‘์‹ฌ๊ณ ๋ฐฑ). ์ฒ˜์Œ๋ถ€ํ„ฑ ์ ์šฉํ•˜๊ฒŒ ๋˜๋‹ˆ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ธ๊นŒ, ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ธ ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ? ๋“ฑ์˜ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋™๋ฃŒ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ ธ์„œ ์“ฐ๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ๋ฆฌ์„œ์น˜๋ฅผ ๋ถ€ํƒํ–ˆ๊ณ , ์ €๋Š” ๋‘ ๊ฐ€์ง€์˜ ์˜ต์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. react-dnd react-beautiful-dnd ๋‘ ๊ฐ€์ง€๋ฅผ ๋น„๊ตํ–ˆ์„ ๋•Œ, beautiful-dnd๊ฐ€ ํ˜„์ €ํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ , ๊ทธ ๋งŒํผ ์ด์Šˆ๋„ ๋งŽ๊ธดํ–ˆ์Šต๋‹ˆ๋‹ค. ใ…Ž ์ž์œ ๋„์ ์ธ ๋ฉด์„ ๋น„๊ตํ–ˆ์„ ๋•Œ๋Š” react-dnd๊ฐ€ ํ™•์‹คํžˆ ๋” ๋†’์•„๋ณด์˜€์ง€๋งŒ, ์ €๋Š” ์นธ๋ฐ˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ  ver..
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋‹˜: ํ•ด๋‹น api ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ๋Š” get์ด๊ณ  body์— ๋‹ด์•„์„œ ๋ณด๋‚ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค~ ๋‚˜: ๋„ต~~ ๊ฒฐ๊ณผ : ERROR ERROR ์™œ?? ๐Ÿ‘€ ?? ์‹ฌ์ง€์–ด Redux๋กœ ์ž‘์„ฑํ•œ api instance์—์„œ๋„ body๋ฅผ ๋‹ด๋Š”๊ฑธ ๊ฑฐ๋ถ€ ใ…‹ .. ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ url, config ์ด์ƒ์œผ๋กœ ๋ชป ๋ฐ›๋Š”๋‹ค๊ณ  ๋ฑ‰์–ด๋ƒ„. ์‹œ๋‹ˆ์–ด๊ฐœ๋ฐœ์ž๋‹˜: get ์š”์ฒญํ•˜๋Š”๋ฐ ๋ฐ”๋””์— ๋‹ด๋Š”๋‹ค๊ณ ??๐Ÿ‘€ ๋‚˜: ๋„ต- ์ „์— ๊ทธ๋ ‡๊ฒŒ ํ–ˆ๋Š”๋ฐ์š”?๐Ÿ˜ณ? ์•ˆ ๋˜๋‚˜์š”? ์ด์ „์—๋„ ๊ฒŒ์‹œํŒ์—์„œ ๊ฒ€์ƒ‰ํ•  ๋•Œ get ๋ฉ”์†Œ๋“œ๋กœ ์š”์ฒญํ•˜๋ฉฐ ๋ฐ”๋””์— ๋‹ด์•„์„œ ๋ณด๋‚ธ ๊ธฐ์–ต์ด ์žˆ๊ธฐ์— - ๋‹น์—ฐํ•˜๊ฒŒ~~~~ body์— ๋‹ด๋Š”๊ฑฐ ์˜คํ‚ค๋„ํ‚ค์š”! ํ–ˆ๋˜ ์ƒํ™ฉ. ํ˜ผ๋ž€๋งŒ ๊ฐ€์ค‘๋˜๋Š” ์ƒํ™ฉ ๊ทธ๋ž˜์„œ ์ •๋ฆฌํ•œ๋‹ค. ์ผ๋‹จ ๊ฒฐ๋ก ๋งŒ ๋ณด์ž๋ฉด, pararms ๋ฅผ ์จ์„œ ์š”์ฒญํ•˜๋ฉด config์— ๋‹ด๊ฒจ์„œ get ์š”์ฒญ์‹œ์—๋„ ๋ฐ”๋””์— ..
Redux๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ, useNavigate๋กœ ๋ผ์šฐํŒ…ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. useNavigate์™€ useLocation์ด๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค! 1. useNavigate() useNavigate๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋™ ๊ฒฝ๋กœ๋กœ state๊ฐ’ ์ „๋‹ฌํ•˜๊ธฐ const navigte() = useNavigate(); navigate("์ด๋™ํ•  ๊ฒฝ๋กœ", state:{ "์ „๋‹ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ" }); 2. useLocation() useLocation์„ ์จ์„œ props ๋ฐ›๊ธฐ const { state } = useLocation();
Redux(๋ฆฌ๋•์Šค)๋ž€? ๋ฆฌ๋•์Šค๋Š” ์˜คํ”ˆ ์†Œ์Šค ์ž๋ฐ”ํฌ์Šค๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ,state๋ฅผ ์ด์šฉํ•ด ์›น ์‚ฌ์ดํŠธ ํ˜น์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•ด์ค„ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฒ ์ด์Šค๋Š” Node.js ๋ชจ๋“ˆ๋กœ store ๋ผ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๊ณต๊ฐ„(์ €์žฅ์†Œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์ „์—ญ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์“ด๋‹ต๋‹ˆ๋‹ค. Redux Toolkit (๋ฆฌ๋•์Šค ํˆดํ‚ท)์ด๋ž€? ๊ธฐ์กด์˜ ๋ฆฌ๋•์Šค์˜ ๊ตฌ์กฐ์™€ ํŒจ๋Ÿฌ๋‹ค์ž„์€ ๊ฑฐ์˜ ๋™์ผํ•˜์ง€๋งŒ ์ฝ”๋“œ๋Ÿ‰์€ ๋” ์ ๊ฒŒ, ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ๊ฐœ์„ ๋œ ๊ฒƒ์ด๋ผ๊ณ  ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋•์Šค ํˆดํ‚ท์˜ ์žฅ์  ๋ฆฌ๋•์Šค์™€ ๋น„๊ตํ•ด๋ณด์ž๋ฉด ์šฐ์„  ์ดˆ๊ธฐ ์„ค์ •์‹œ์— ๋ฆฌ๋•์Šค๋Š” ์Šคํ† ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ค์น˜ํ•ด์•ผํ–ˆ๋˜ ๊ฐ์ข… ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ํˆดํ‚ท์—๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๋ถˆ๋ณ€์„ฑ์— ๋Œ€ํ•ด์„œ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์œผ์…”๋„ ๋ฉ๋‹ˆ๋‹ค! ์ด๋Ÿฐ ..
drag and drop ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์„œ ๋‹น์—ฐํ•˜๋‹ค๋Š” ๋“ฏ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„ ์ผ๋Š”๋ฐ, ์›ฌ๊ฑธ - ๊ฐ€๋กœ๋กœ ์›€์ง์ด๋Š” ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„์„ ํ•˜๊ณ  ๊ทธ ์•ˆ์— ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์€ ์•„๋ž˜์œ„๋กœ ์Šคํฌ๋กค์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์›น์•ฑ์ธ์ง€๋ผ ํ„ฐ์น˜๋กœ ๋“œ๋ž˜๊ทธ๊นŒ์ง€ ๋˜์•ผํ•˜๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค. ์ฒ˜์Œ์— ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ๋Š” siwper๋ผ๋Š” ๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ , ์Šฌ๋ผ์ด๋“œ ์•ˆ์ชฝ ๋ถ€๋ถ„์—๋„ ๋‹ค๋ฅธ ๋“œ๋ž˜๊ทธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ์—์„œ ์ œ๋Œ€๋กœ ๊ตฌํ˜„์„ ํ•  ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์œ ๋ฅผ ์ด์•ผ๊ธฐํ•ด๋ณด์ž๋ฉด, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ์ถฉ๋Œ์„ ํ•œ๋‹ค. ๊ฐ„ํŽธํ•˜๊ฒŒ ์“ฐ์ž๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์“ฐ๋Š”๋ฐ ์„œ๋กœ ์ถฉ๋Œํ•ด์„œ ๋‚œ์žฅํŒ์ด ๋œ๋‹ค. ์ถฉ๋Œ ์•ˆ๋˜๋Š”๊ฑธ ์ฐพ์•˜๋”๋‹ˆ ๊ฐ€๋กœ ์Šฌ๋ผ์ด๋“œ ๊ตฌํ˜„์„ ๋„์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ชจ๋“  ๋งˆ์šฐ์Šค ์ด๋ฒคํŠธ๋ฅผ ๋‹ค ๋บ์–ด๊ฐ€์„œ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋จนํžˆ์ง€ ์•Š๋Š” ์ผ๋„ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ฒฐ๊ตญ์€ ํ•˜..
๋งจ๋‚  ์ •ํ•ด์ ธ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ด์šฉํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ๋งŒํ•˜๋‹ค๊ฐ€ ๋ชจ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด UI๋ฅผ ์งœ์•ผํ•˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค. ๋ฐ‘๋ฐฅ์„ ๊น”์•„๋ณด์ž๋ฉด ใ…‹ใ…‹... ์ฒ˜์Œ๋ถ€ํ„ฐ ๋นŒ๋“œํ•œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ค‘๊ฐ„์— ๋ผ์—ฌ๋“  ํ”„๋กœ์ ํŠธ์˜€๊ธฐ์— ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ๋ถ€ํ„ฐ ๋ฒ„๋ฒ…์ด๊ธด ํ–ˆ๋‹ค. ์ž ์ด์ œ ๋ฐ‘๋ฐฅ์€ ๊น”๋ฆผ. ๋‚ด๊ฐ€ ํ•ด์•ผํ•  ๋ชฉ๋ก 1. swiper ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ด๋‹ค. 2. navigator ๋ฒ„ํŠผ์„ ๋‚˜์˜ค๊ฒŒํ•˜๊ณ  ์ฒซ ์Šฌ๋ผ์ด๋“œ์—์„œ๋Š” ์™ผ์ชฝ ๋ฒ„ํŠผ์ด ์‚ฌ๋ผ์ง€๊ฒŒ ๋งˆ์ง€๋ง‰ ์Šฌ๋ผ์ด๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ๋ฒ„ํŠผ์ด ์‚ฌ๋ผ์ง€๊ฒŒํ•œ๋‹ค. 3. ์Šฌ๋ผ์ด๋“œ๋Š” ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•œ๋‹ค. Code import React, { useState } from 'react'; import { Swiper, SwiperSlide } from 'swiper/react'; const Projects = () => { const [sw..
์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃจ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๊ธฐ์กด์— ํ•ด์˜ค๋˜ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ์ด๋ฒˆ์—๋Š” ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋ณด๋‚ด์„œ url๋ฅผ ๋ฐ›์•„์™€์„œ ๋‹ค์‹œ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ create ํ˜น์€ update๋ฅผ ํ•ด์ค˜์•ผํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋งŒ์•ฝ์— ๊ธฐ์กด์— url์ด ์žˆ๋Š” ์ƒํƒœ๋ฉด pass๋ฅผ ํ•˜๊ณ  ์ƒˆ๋กœ ๋„ฃ์€ ์ด๋ฏธ์ง€๋งŒ url์„ ๋‹ค์‹œ ๋ฐ›์•„์™€์„œ update๋ฅผ ํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. api๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— console.log๋กœ body๋ฅผ ์ฐ์œผ๋ฉด ๋ถ„๋ช…ํžˆ ์—…๋ฐ์ดํŠธ ๋œ ์ด๋ฏธ์ง€ url์ด ์ฐํžˆ๋Š”๋ฐ, ๋ง‰์ƒ api๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด payload์— ์—…๋ฐ์ดํŠธ๋œ ๊ฐ’์ด ์•ˆ ์ฐํžˆ๋Š” ๊ฒƒ์ด๋‹ค!!!!!!!! ๋ฐ˜๋‚˜์ ˆ์„ ๋ถ™์žก๊ณ  ๋Š˜์–ด์ ธ์žˆ๋Š”๋ฐ ๋ฏธ์น ์ง€๊ฒฝ... async - await๋ฅผ ์จ์„œ ๋น„๋™๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์คฌ๋Š”๋ฐ ๋ญ๊ฐ€ ๋ถˆ๋งŒ์ด๋‹ˆ?! ๋ญ๊ฐ€ ์ž˜ ๋ชป ๋œ๊ฑด๋ฐ?! .... ๋ฌธ์ œ..
React-Query ์žฅ์  ์ค‘์˜ ํ•˜๋‚˜์˜€๋˜ ์บ์‹ฑ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ณด๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹ฑ์„ ์ด์•ผ๊ธฐ ์ „์— ์•Œ์•„๋‘๋ฉด ์ข‹์„ tool์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ReactQueryDevtools ์ด๋ผ๋Š” ๊ฒƒ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ fetching ๋˜๊ณ  ๊ทธ ์ƒํƒœ๊ฐ’์ด๋ผ๋˜๊ฐ€ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” tool์ž…๋‹ˆ๋‹ค. react query ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. โ–ถ ReactQueryDevtools ์‚ฌ์šฉ๋ฒ• import { ReactQueryDevtools} from 'react-query/devtools'; //์ด๋ ‡๊ฒŒ import ํ•ฉ๋‹ˆ๋‹ค function App() { return ( ); } ์•„๋ž˜์™€ ๊ฐ™์ด ํ™”๋ฉด ํ•˜๋‹จ ์˜ค๋ฅธ์ชฝ์— ๋œฌ ๋ฒ„ํŠผ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์–ด์š”. ํด๋ฆญ์„ ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ํ™”๋ฉด์ฒ˜๋Ÿผ ๋œน๋‹ˆ๋‹ค. tools ์•ˆ์—์„œ fresh ,..
React-Query ๋น„๋™๊ธฐ ํ†ต์‹  fetch, axios ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ๋น„๋™๊ธฐ ๋กœ์ง์„ ์‰ฝ๊ฒŒ ๋‹ค๋ฃจ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ช‡ ๊ฐ€์ง€ ์žˆ์ง€๋งŒ react-query๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ๋งŒ ํ•œ๋‹ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค(์บ์‹ฑ, ๊ฐ’ ์—…๋ฐ์ดํŠธ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๋“ฑ)์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ๋„ ๋งค์šฐ ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผํ•˜๋Š” ๋กœ์ง์„ store์—์„œ ๊ฐœ๋ฐœํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. store๋Š” client์—์„œ state๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‚ด๋ถ€์— client data ์™€ server data ๊ฐ€ ๊ณต์กด์„ ํ•˜๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„์ด ์ƒ๊ฒจ๋‚ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋“ค์ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉด์„œ ํ˜ผ๋ž€์„ ๋นš์–ด๋‚ด๋Š”๋ฐ react-query๋ฅผ ..
์ด๋ฏธ์ง€ํŒŒ์ผ์„ ๋งŽ์ด ๋‹ค๋ฃจ๋Š” ์—…๋ฌด๋ฅผ ๋ณด๊ณ  ์žˆ๋‹ค. ๊ฐ‘์ž๊ธฐ ์ถ”๊ฐ€๋œ ์–ด๋–ค ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด์„œ ํ”„๋ก ํŠธ์ชฝ์—์„œ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ”๊ฟ”์„œ ์ „๋‹ฌํ•ด์•ผํ•  ์ผ์ด ์ƒ๊ฒผ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„์„œ ์“ฐ๊ฒŒ ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ React Image File Resizer ๋„“๋”” ๋„“์€ ๋ฆฌ์•กํŠธ ์ƒํƒœ๊ณ„์—์„œ ์—†๋Š”๊ฒŒ ์—†๋‹ค. ์ด๋ฏธ์ง€์˜ width, height, format ๋“ฑ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํŒจํ‚ค์ง€์ด๋‹ค. ์„ค์น˜ํ•˜๊ธฐ npm i react-image-file-resizer or yarn add react-image-file-resizer ์‚ฌ์šฉํ•˜๊ธฐ //๋ถˆ๋Ÿฌ์˜ค๊ธฐ import Resizer from "react-image-file-resizer"; //์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•  ๊ฑด์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์ฐจ๋ก€ ์ฐจ๋ก€ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. Resizer.imageFileResizer( file, //๋ฐ”..
useRef ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋ฐ, ์˜ค๋žœ๋งŒ์— ์—…๋ฌด๋ฅผ ๋ณด๋‹ค๊ฐ€ ์‚ฌ์šฉํ•  ์ผ์ด ์ƒ๊ฒผ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ณธ๋‹ค!! useRef ์‚ฌ์šฉํ•˜๊ธฐ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ฃผ๋กœ useRef๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํŠน์ • DOM ์š”์†Œ์—๊ฒŒ ์ ‘๊ทผํ•ด์•ผํ•  ๋•Œ์ด๋‹ค. ์ปดํฌ๋„ŒํŠธ์— ์ƒ๊ธด ์Šคํฌ๋กค ๋™์ž‘์„ ์ œ์–ดํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋•Œ useRef๋ฅผ ์จ์„œ ํ•˜๋ฉด ๋œ๋‹ค. ์ด ์™ธ์—๋„ ํฌ์ปค์Šค๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผํ•œ๋‹ค๋˜์ง€, ํฌ๊ธฐ๋ฅผ ํŠน์ •ํ•ด์•ผํ•œ๋‹ค๋˜์ง€ DOM์š”์†Œ์— ๋Œ€ํ•œ ์„ธ์„ธํ•œ ๊ฒƒ๋“ค์ด ํ•„์š”ํ•  ๋•Œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์ €๋Š” ๋ฆฌ์•กํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์“ฐ๊ณ  ์žˆ๊ธฐ๋•Œ๋ฌธ์— useRef hook์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šคํ˜•์€ ์ฝœ๋ฐฑํ•จ์ˆ˜๋„ ์จ์•ผํ•˜๊ณ . ์‚ด์ง ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. useRef ์„ ์–ธํ•˜๊ธฐ ์„ ์–ธ ๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. useRef ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ณ  ๊ทธ ์•ˆ์— ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค...
๋ฐ(Ming) ๐Ÿฐ
'๊ฐœ๋ฐœ/React' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก