๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ Study

useSyncExternalStore? ๐Ÿ’ก ํ•™์Šต ๊ณต์œ  ์Šคํ„ฐ๋””์—์„œ ๋ฐœํ‘œ๋ฅผ ์œ„ํ•ด ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๐Ÿค ๋น ๋ฅธ ์ž‘์„ฑ์„ ์œ„ํ•ด ์Œ์Šด์ฒด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. โ˜ ๏ธ ํ•™์Šต ์ค‘์— ์ž‘์„ฑํ•œ ๊ธ€์ด๋ฏ€๋กœ ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿฅฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜์‹ ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! โœ”๏ธ useSyncExternalStore ์™œ ๋‚˜์˜ด? 1. React 18์˜ ํ˜์‹ , Concurrency React ํŒ€์€ React 18์„ ๋ฐœํ‘œํ•˜๋ฉด์„œ, ์ด๋ฒˆ ๋ฆด๋ฆฌ์ฆˆ๋Š” ๋™์‹œ์„ฑ(Concurrency) ์˜ ๋„์ž…์œผ๋กœ ๋ Œ๋”๋ง ์—”์ง„ ๊ฐœ์„ (์ž๋™๋ฐฐ์นญ)๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ(transition, suspense)์— ์ง‘์ค‘ํ–ˆ๋‹ค๊ณ  ํ•จ. ๋™์‹œ์„ฑ์ด ๋จผ๋””? ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋™์‹œ์— ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ ์ธ ๊ฐœ๋…์œผ๋กœ ๋งํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด .. ๋”๋ณด๊ธฐ
๐Ÿ›‘ Storybook Error : useLocation() may be used only in the context of a <Router> component. ์ด ์—๋Ÿฌ๋Š” ๋ฉ”์„ธ์ง€์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋‹ค ์‹ถ์ด ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ useLocation() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ์ด๊ฑด Router ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฒฝ๊ณ ํ•˜๋Š” ์—๋Ÿฌ๋‹ค. ์›๋ž˜๋Š” ์ด ์—๋Ÿฌ๋ฅผ storybook-react-rouer ๋ฅผ ์„ค์น˜ํ•ด ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ ๋œ React Router v.6 ๋ž‘ ํ˜ธํ™˜์ด ์•ˆ๋˜๋Š”๊ฑด์ง€ ๋ญ”์ง€ ๋‚˜๋Š” ์ ์šฉ์ด ์ž˜ ์•ˆ๋๋‹ค...ใ…  ๊ทธ๋ž˜์„œ ์ด๋ฆฌ์ €๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด๋‹ค ์ž„์‹œ๋ฐฉํŽธ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์šฐ์„  ํ•ด๊ฒฐํ–ˆ๋‹ค. function TestRouter({ children }) { return ( ); } ์ด๋Ÿฐ ์•„๋ฌด ์—ญํ• ๋„ ์•ˆํ•˜๋Š” Router ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  export const decorators = [ Story => ( ), ]; .storybook/preview.js ํŒŒ.. ๋”๋ณด๊ธฐ
Storybook Chromatic ์œผ๋กœ ๋ฐฐํฌํ•ด๋ณด๊ธฐ! + ๋ฒˆ์™ธ Netlify Storybook์€ ๋‹จ์ˆœํ•œ ํ…Œ์ŠคํŒ… ํˆด์„ ๋„˜์–ด ํ˜‘์—… & ๋ฌธ์„œํ™” ํˆด์ด๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„  ๋‹น์—ฐํžˆ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐํฌ๋„ ํ•  ์ˆ˜ ์žˆ๊ณ  Storybook์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ์ „์šฉ ์„œ๋น„์Šค๊นŒ์ง€ ์žˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ Chromatic! Chromatic ๊ณผ ํ•จ๊ป˜๋ผ๋ฉด ๋ฐฐํฌ๋Š” ๋ฌผ๋ก  ๊ทธ ์ดํ›„์˜ build ๊ด€๋ฆฌ๊นŒ์ง€ Storybook ๋งž์ถค์œผ๋กœ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค! ์ค€๋น„๋ฌผ์€ Storybook์„ ์ ์šฉํ•œ ํ”„๋กœ์ ํŠธ Github ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค! 1. ๊ฐ€์ž… ๋จผ์ € Chromatic ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ด Github ๊ณ„์ •์œผ๋กœ ๊ฐ€์ž…์„ ํ•ด์ฃผ์ž! 2. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์•„๋งˆ ์ตœ์ดˆ ํšŒ์›๊ฐ€์ž…์„ ํ•ด์„œ ๋กœ๊ทธ์ธ์„ ํ•˜๋ฉด ์œ„์˜ ํ™”๋ฉด์ด ๋œฐ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ Choose from GitHub์„ ์„ ํƒ! ๋งŒ์•ฝ ์•ˆ๋œฌ๋‹ค๋ฉด ํ™”๋ฉด Projects ํƒญ์— ์žˆ๋Š” add projec.. ๋”๋ณด๊ธฐ
React ํ”„๋กœ์ ํŠธ์— Storybook ์ผ๋‹จ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ! with TS ๐Ÿ’กStorybook์— ๋Œ€ํ•œ ์ดํ•ด์™€ ํ•™์Šต๋ณด๋‹ค ๋น ๋ฅธ ์ ์šฉ์„ ๋ชฉ์ ์œผ๋กœ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค! โ˜ ๏ธ Storybook ํ•™์Šต ์ค‘์— ์ž‘์„ฑํ•œ ๊ธ€์ด๋ฏ€๋กœ ๋‚ด์šฉ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์ปดํฌ๋„ŒํŠธ์˜ props ๊ฐ’์„ ํŽธํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์–ด๋–ป๊ฒŒ ๋ Œ๋”๋ง ๋˜๋Š”์ง€ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ† ๋ฆฌ๋ถ์€ ์จ๋ณด๋ฉด ์ •๋ง ํŽธํ•˜๊ณ  ์ข‹๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋˜ ์ผ์ข…์˜ ํ”„๋กœ์ ํŠธ ๋ฌธ์„œํ™” ์ž‘์—…๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฒฝํ—˜์ƒ ์ฒ˜์Œ ์จ๋ณด๋ ค๊ณ  ํ• ๋•Œ ์Šคํ† ๋ฆฌ๋ถ์ด ์ •ํ™•ํžˆ ๋ญ”์ง€๋„ ๋ชจ๋ฅด๊ฒ ๊ณ  ์–ด๋–ป๊ฒŒ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๊ฐ์ด ์ž˜ ์•ˆ ์˜ค๋Š”๋ฐ ๋ฌด์—‡๋ณด๋‹ค ์Šคํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋‹ด๊ฐ์— ์„ ๋œป ์‹œ์ž‘ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šด ๊ฑฐ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ๋ง‰์ƒ ํ•œ๋ฒˆ ์ ์šฉํ•ด์„œ ์ด๊ฑฐ์ €๊ฑฐ ๊ฑด๋“œ๋ ค๋ณด๋ฉฐ ์–ด๋Š ์ •๋„ ์ ์‘ํ•˜๊ณ  ๋‚˜๋ฉด ๊ทธ๋ƒฅ ๊ณต์žฅ์ฒ˜๋Ÿผ ์ฐ์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค! ^-^)ใ…Ž ์•„.. ๋”๋ณด๊ธฐ
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ & ๊ธฐ๋ณธ ํƒ€์ž… ๐Ÿ’ก Udemy ์˜ Typescript : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „ํ˜• ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ๊ฐ•์˜ ์Šคํ„ฐ๋””์—์„œ ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ—“ ์Šคํ„ฐ๋”” ๋‚ ์งœ : 22.05.29 # ์ •์  ํƒ€์ž… ์–ธ์–ด VS ๋™์  ํƒ€์ž… ์–ธ์–ด 1. ๋™์  ํƒ€์ž… ์–ธ์–ด ์‹ค์ œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ธ ๋Ÿฐํƒ€์ž„ ์‹œ ํƒ€์ž…์„ ์ฒดํฌํ•˜๊ณ  ๊ฒฐ์ •ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ๋•Œ ํƒ€์ž… ์„ ์–ธ์ด๋‚˜ ํƒ€์ž…์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ง€ํ‚ฌ ํ•„์š”๊ฐ€ ์—†์–ด ์ƒ๋Œ€์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์งง์œผ๋ฉฐ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค. ํƒ€์ž…์„ ๋ช…์‹œ ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์ •์  ํƒ€์ž… ์–ธ์–ด์— ๋น„ํ•ด ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฝ”๋“œ ๋‚ด์—์„œ ํƒ€์ž…์„ ์œ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉฐ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค. ์ฝ”๋“œ๋ฅผ ์ฝ์„๋•Œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋ฉฐ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋…์„ฑ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ข‹์ง€ ์•Š๋‹ค. ex ) JavaScript 2. .. ๋”๋ณด๊ธฐ