์ „์ฒด ๊ธ€

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Frontend Developer
โ–ช Git์€ ์•Œ๊ณ  ๋ณด๋ฉด ์ฐธ ํŽธํ•˜๊ณ , ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๋…€์„! ๊ทธ๋ ‡๋‹ค! ์•Œ๊ณ  ๋ณด๋ฉด ์ฐธ ๋‹ค์žฌ๋‹ค๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ํŽธ๋ฆฌํ•œ ์•„์ด๋‹ค! ํ•˜์ง€๋งŒ ํ•œ๋ฒˆ ๊ผฌ์ด๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋‹ต์ด ์—†๋‹ค ๋จธ๋ฆฌ๊ฐ€ ์ ์  ์•„ํŒŒ์˜ค๋Š” ์ผ๋“ค์ด ๋ฐœ์ƒํ•œ๋‹ค! ํ•œ๋ฒˆ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ํ’€๊ณ  ๋‚˜๋ฉด ๋‹ค์‹œ๋Š” ์•ˆ ๋งŒ๋‚  ๊ฒƒ ๊ฐ™์ง€๋งŒ ์›ฌ๊ฑธ, ๊นƒํ—™์€ ๋˜ ๋งŒ๋‚œ๋‹ค ๐Ÿ˜ **์‹ค์ œ๋กœ ์“ฐ๋Š” ์šฉ์–ด๋ฅผ ๊ทธ๋Œ€๋กœ ์ ๊ธฐ ์œ„ํ•ด์„œ ์ค‘๊ฐ„์ค‘๊ฐ„ ์˜์–ด๋‹จ์–ด๋กœ ์žฌ์—ฐํ•ฉ๋‹ˆ๋‹คใ…‹** ์ƒˆ๋กœ ์‹œ์ž‘ํ•  ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ์…‹ํŒ…ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ธฐ์กด์— ์žˆ๋˜ ํ”„๋กœ์ ํŠธ๋Š” 'A' ์›๊ฒฉ ์ €์žฅ์†Œ(Remote ์ €์žฅ์†Œ, ๋˜๋Š” ๊นƒํ—™ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ)์—์„œ cloneํ•ด์„œ ์•ˆ ์“ฐ๋Š” ํด๋”๋ฅผ ์†์•„์น˜๊ธฐํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€ ๋“ฑ์„ ์…‹ํŒ…ํ–ˆ๋‹ค. ์ž! ์ด์ œ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋ก๋“ค์„ ์Œ“์•„๊ฐˆ 'B' ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค. ์ด์ œ ์†์•„์น˜๊ธฐํ•œ ํŒŒ์ผ๋“ค์„ 'B' ์›๊ฒฉ ์ €์žฅ์†Œ์— push ํ•˜๋ฉด ..
โ–ช AccessToken , RefreshToken ์›๋ฆฌ AccessToken , RefreshToken์€ ๋กœ๊ทธ์ธ, ํšŒ์› ๊ฐ€์ž… ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ์“ด ์ ์ด ์žˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ๋ฉ”๋ชจํ•ด ๋‘” ์ ์€ ์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ๋‚˜๋Š” ๋‹จ์ˆœํžˆ accessToken์„ ๋ฐ›์€ ์ดํ›„์— ๋งŒ๋ฃŒ๊ฐ€ ๋˜๋ฉด RefreshToken์„ ๋‹ค์‹œ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์•„๋‹ˆ์˜€๋‹ค!! ๐Ÿ˜ accessToken๊ณผ refreshToken์˜ ํฐ ์ฐจ์ด์ ์€ ์œ ํšจ๊ธฐ๊ฐ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, accessToken ์ด 2-3์‹œ๊ฐ„ ์ •๋„๋ผ๋ฉด refreshToken์€ 2์ฃผ, ํ•œ ๋‹ฌ๊นŒ์ง€๋„ ์œ ํšจ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. user๊ฐ€ ๋กœ๊ทธ์ธ์„ ์š”์ฒญํ•˜๋ฉด server์—์„œ DB๋กœ ํšŒ์›์„ ํ™•์ธํ•˜๊ณ  server์—์„œ accessToken๊ณผ refreshToken์„ user์—๊ฒŒ ๋ฐœ..
CustomSwitch button์„ ๋”ํ–ˆ๋Š”๋ฐ, ๊ฐ‘์ž๊ธฐ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. Error: Cannot run with sound null safety ์•Œ์•„๋ณธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•˜๋‹ค. ๋ฉ”๋‰ด์ฐฝ์—์„œ Run (์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ๊ธฐ์ค€) > Edit Configurations ๊ทธ๋ฆฌ๊ณ  --no-sound-null-safety ๋ผ๋Š” ๋ง์„ Additional run args:์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐ~ ์•ˆ๋Œ์•„๊ฐ€๋˜ ์ฝ”๋“œ๊ฐ€ ์ž˜ ๋Œ์•„๊ฐ„๋‹ค!!!
์‚ฌ์‹ค, ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์–ด์„œ ๋งŒ๋“œ๋Š” ํฌ์ŠคํŒ… ๐Ÿ˜… โœ… git branch ๋งŒ๋“ค๊ธฐ ์ฃผ๋กœ ํ„ฐ๋ฏธ๋„์—์„œ ๋ช…๋ น์–ด๋กœ ์ ์–ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ฃ ? ์ €๋„ git ๋งŒ๋“ค๋•Œ ๋ช…๋ น์–ด๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ๋А๊ปด์กŒ๋Š”๋ฐ ๊ณ„์† ์“ฐ๋‹ค๋ณด๋‹ˆ ๋ช…๋ น์–ด๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ถˆํŽธํ•œ ์ง€๊ฒฝ์ด ๋œ ๊ฒƒ ๊ฐ™์•„์š”. ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๋ณด๋ฉด ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ด์„œ ์„ธ๋ถ„ํ™”ํ•ด์„œ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ๋„ฃ์–ด์ฃผ์‹œ๋ฉด branch๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ธŒ๋žœ์น˜๋กœ ๊ฒฝ๋กœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. git checkout -b ํ˜„์žฌ ์–ด๋””์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด git branch ๋ฅผ ๋„ฃ์–ด๋ณด์‹œ๋ฉด ํ˜„์žฌ ์–ด๋А ๋ธŒ๋žœ์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์–ด์š” ๋งŒ์•ฝ์— ๋ธŒ๋žœ์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค?! ๊ทธ๋Ÿฌ๋ฉด switch๋ฅผ ์จ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค git switch โœ… git branch ์ด๋ฆ„ ๋ณ€๊ฒฝํ•˜๊ธฐ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค์—ˆ..
โ–ช flutter / firebase ์—ฐ๋™ํ•˜๊ธฐ ํ”Œ๋Ÿฌํ„ฐ์™€ firebase๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์‰ฌ์šด ํŽธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์ „ ์˜ค๋ž˜ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‘ firebase ์ฝ˜์†”์—์„œ ์•ˆ๋“œ๋กœ์ดํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ณ  flutter ํŒŒ์ผ๋กœ ๋Œ์•„์™€์„œ app ํด๋”์†์˜ build.gradle ํŒŒ์ผ์— ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. firebase๋ฌธ์ œ๊ฐ€ ์ƒ์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋ ค์šธ๊ฒŒ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ๋“ค ์—…๋ฐ์ดํŠธ๋ฅผ ๋๋‚ด๊ณ  ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋ฅผ ๋งŒ๋‚ฌ๋Š”๋ฐ, flutter sdk๋ฒ„์ ผ๊ณผ firebase ๋ฒ„์ ผ์ด ์ƒํ˜ธ๊ฐ€ ์•ˆ ๋˜์„œ์˜€์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด๋• android > app > build.gradle ํŒŒ์ผ์— midSdkVersion๊ณผ targetSdkVersion์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋„ฃ์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ˆซ์ž๋งŒ ๋”ํ•ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ ์ „ ๊ทธ๊ฑธ ๋ชจ๋ฅด๊ณ  ์—„์ฒญ ํ•ด๋งธ..
โ–ช Literal types const userName1 = "Bob"; let userName2 = "Tom"; const๋Š” ์ƒ์ˆ˜๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ, let๋Š” ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•œ ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ € ์ƒํƒœ์—์„œ VSC๊ฐ™์€ ์—๋””ํ„ฐ์—์„œ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค๋ณด๋ฉด const๋Š” "Bob"์ด๋ผ๊ณ  ์„ ์–ธ ๋œ ๊ฐ’์ด ๋œจ๊ณ , let์€ let userName2 : string์ด๋ผ๋Š” ํƒ€์ž… ๊ฐ’์ด ๋œน๋‹ˆ๋‹ค. let์€ ์–ธ์ œ๋“  ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. userName2 ์— ์ˆซ์ž๋ฅผ ๋„ฃ๊ณ  ์‹ถ๋‹ค๋ฉด? let userName2 : string | number = "Tom"; ์ด๋ ‡๊ฒŒ ํƒ€์ž…์„ ๋‘˜ ๋‹ค ๋ช…์‹œํ•ด์ค๋‹ˆ๋‹ค. type Job = "police" | "developer" | "teacher"; interface User..
โ–ช React๋Š” NextJS๋ฅผ ์ด์šฉํ•ด์„œ SSR์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ–ช Static Generation vs Server-side Rendering pre-rendering(์‚ฌ์ „๋ Œ๋”๋ง) ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŽ˜์ด์ง€ pre-render - ์‚ฌ์ „์— HTML ํŒŒ์ผ๋“ค์„ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํผํฌ๋จผ์Šค๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  SEO์— ์ตœ์ ํ™”๋œ๋‹ต๋‹ˆ๋‹ค. Javascript์„ ๋„๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง์„ ํ•ด๋„ HTML์ด ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Javascript์„ ๋ณต์›์‹œ์ผœ์ฃผ๋ฉด hydration์ด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •์ ์ธ ํŽ˜์ด์ง€๊ฐ€ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค Static Generation : ์ •์ ์ƒ์„ฑ vs Server-side Rendering : ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ด ๋‘ ๊ฐ€์ง€์˜ ์ฐจ์ด์ ์€ ์–ธ์ œ HTML ์„ ๋งŒ๋“œ๋ƒ์ž…๋‹ˆ..
1. ๋ฐ”๋ฒจ(babel)์ด๋ž€? โ–ช ๋ธŒ๋ผ์šฐ์ €๋‚˜ ํ”Œ๋žซํผ๋งˆ๋‹ค ๋ณด์—ฌ์ง€๋Š” ๋ชจ์Šต์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €, ํ™˜๊ฒฝ์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๊ณ  ํ•ด๋‹น ์›น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ตœ์ ํ™”๋ฅผ ํ•˜๋Š” ์ž‘์—…์„ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์ด๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋Š” ์ฝ”๋“œ์˜ ์ผ๊ด€์„ฑ๋„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•˜๋Š” ์š”์†Œ ์ค‘์— ํ•˜๋‚˜์ด๋‹ค. ์ด๋Ÿฐ ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ํˆด์ด ๋ฐ”๋ฒจ์ด๋‹ค! ES6+ ๋ฒ„์ „์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ, JSX ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ์–ธ์–ด๋“ค์— ๋Œ€ํ•ด์„œ๋„ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ˜ธํ™˜์„ฑ์„ ์ง€์ผœ์ค€๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ์˜ ์—ญํ• ์„ ํ•œ๋‹ค. ๋ฐ”๋ฒจ ์„ค์ •์„ ํ•  ๋•Œ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๋‘๊ฐ€์ง€ ํŒŒ์ผ ํฌ๋งท์€ ๋‹จ๋…์œผ๋กœ ์“ฐ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ํ•จ๊ป˜ ์“ฐ์ผ ..
{ "presets": ["next/babel"] } github์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก ํ•œ ํ›„์— npm installํ•˜๊ณ  npm run build๋ฅผ ํ•˜๋Š”๋ฐ, SWC failed to load ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค. ๊ทธ๋ฆฌ๊ณ  https://nextjs.org/docs/messages/failed-loading-swc ์—ฌ๊ธฐ๋ฅผ ๋ฐฉ๋ฌธํ•ด๋ณด๋ผ๋Š” ๋ฉ”์„ธ์ง€๊ฐ€ ๋– ์„œ ๋ดค๋”๋‹ˆ node modules๊ณผ package-lock.json์„ ์ง€์šฐ๊ณ  ๋‹ค์‹œ npm install์„ ํ•˜๊ฑฐ๋‚˜, ๊ทธ๋ž˜๋„ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์†๋˜๋ฉด .babelrcํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋ผ๊ณ  ํ–ˆ๋‹ค. ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ์ง€์› ๋Š”๋ฐ๋„, ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋˜ ์ƒ๊ฒจ์„œ ํ”„๋กœ์ ํŠธ ์ž์ฒด๋ฅผ ๋‹ค์‹œ ํด๋ก  ๋ฐ›๊ณ , babelrc ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์คฌ๋‹ค! ์•„๋ž˜์™€ ๊ฐ™์ด ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค. ํŒŒ์ผ์˜ ์œ„์น˜๋Š” ์ตœ์ƒ๋‹จ์ด๋‹ค! .babelrc { "..
โ–ช ์™„์„ฑ ํ•  ๋ ˆ์ด์•„์›ƒ ์ € ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š”๋ฐ, ์ „์ฒด์ ์œผ๋กœ ๊ฐ์‹ผ Container ๊ฐ€ ์žˆ๊ณ , ๊ทธ ์•ˆ์— Column๋กœ ํ•œ๋ฒˆ ๋” ๊ฐ์‹ธ๊ณ , ๊ฐ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์„ค๊ณ„ ๊ณ„ํš์„ ์„ธ์› ๋‹ค. Column( children: [ 1. Container - ํ•™๊ต ์ด๋ฉ”์ผ์ด๋ผ๋Š” Text๋ฅผ ์“ธ ๊ฒƒ 2. Row - TextFormField(์ด๋ฉ”์ผ input) , OutlinedButton(์ธ์ฆํ•˜๊ธฐ) 3. SizedBox - input ์‚ฌ์ด์— ๊ฐ„๊ฒฉ์„ ์œ„ํ•ด์„œ 4. TextFormField - ์ธ์ฆ๋ฒˆํ˜ธ ์ž…๋ ฅ input 5. OutlinedButton - ๋‹ค์Œ ๋ฒ„ํŠผ ] ) โ–ช ๋ฌธ์ œ ๋ฐœ์ƒ 1์„ ํ•˜๊ณ  2๋ฒˆ์œผ๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ ์šฐ์„  Row๋ฅผ ์•ˆ ์“ฐ๊ณ , TextFormField๋ฅผ ๋จผ์ € ์ผ๋Š”๋ฐ ํ™”๋ฉด์— ์ถœ๋ ฅ์ด ์•ˆ ๋˜๋Š”๊ฑฐ๋‹ค! ์ด ์ „์— ์œ ํŠœ๋ฒ„ ..
React Project๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด์„œ Reducer์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜ฌ ๋•Œ ์ƒ๊ฒจ๋‚œ ์˜ค๋ฅ˜์ด๋‹ค. Reducer store์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ useSelector๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด๋˜๋Š”๊ฑด๋ฐ, ์ด์ „์—๋Š” ์ž˜ ๋˜๋˜๋ฐ ๊ฐ‘์ž๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•ด์„œ undefined ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ƒ๊ธด ์˜ค๋ฅ˜์ด๋‹ค. React ํŒŒ์ผ ์ผ๋ถ€, let scoreMention = ""; if(userInfo['scorelist'] == null){ return null }else{ if(userLan === "kr"){ Object.keys(userInfo['scorelist']).map((c, idx) => { if (scoreper >= parseInt(c)) { return (scoreMention = use..
ํ”Œ๋Ÿฌํ„ฐ์—์„œ๋Š” route๋ผ๋Š” ๊ฐœ๋…์œผ๋กœ ํŽ˜์ด์ง€ ์ด๋™์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์ด๋™ํ•  ๊ณณ์„ page๋ผ๊ณ  ์ƒ๊ฐํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ตณ์ด ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„์ง€ ์•Š์•„๋„ ๊ฐ™์€ ํŒŒ์ผ ์•ˆ์—์„œ page๋งŒ ๋‚˜๋ˆ ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฐธ ์‰ฝ์ฃต? ๐Ÿ˜ ์ด๋™ ํ•  ๋•Œ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ๋Š” Navagator ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. main.dart Container( margin: EdgeInsets.only(top: 100, left: 0), width: 100, child: IconButton( icon: Text('Signup', style: TextStyle(fontSize: 20),), onPressed: (){ Navigator.push(context, MaterialPageRoute(builder: (context) => SignUpPage(..
๋ฐ(Ming) ๐Ÿˆ‍โฌ›
Ming devlog