์ „์ฒด ๊ธ€

์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘ ์ž…๋‹ˆ๋‹ค
ยท TIL
์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ firestore์—์„œ ๋ฐ›์•„์™”๋‹ค. ์œ„์˜ state์— ์ €์žฅ์„ ํ•ด์•ผํ•œ๋‹ค. ์–ด๊น€์—†์ด ์ƒ๊ธฐ๋Š” ์—๋Ÿฌ useState์— ๋ฌด์Šจ ํƒ€์ž…์ธ์ง€ ์ฃผ์ง„ ์•Š๊ณ  ๋ฐฐ์—ด์ด๋ผ๋Š” ๊ฒƒ๋ง ์•Œ๋ ค์คฌ์œผ๋‹ˆ ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด ์นœ๊ตฌ๋“ค๋„ never ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ๋ฉด์„œ ๊ฒฝ๊ณ ๋ฅผ ๋‚ด๋ฟœ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋‘˜๋‹ค ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜๋‚˜๋ฅผ ํ•ด๊ฒฐํ•œ๋‹คํ•ด๋„ ํ•˜๋‚˜๋งŒ ํ•ด๊ฒฐ๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ์œ„๊ฐ™์ด ํ•ด์ค€๋‹ค๋ฉด ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ title,spentTime,progress๊ฐ€ {id:string}์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ด ๋ถ€๋ถ„์€ ์™œ ์ด๋ ‡๊ฒŒ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค. ํ•ด๊ฒฐ๋œ๋‹ค๋ฉด ๋‹ค์‹œ ํฌ์ŠคํŒ…ํ•ด์•ผ๊ฒ ๋‹ค.
Modal ๋งŒ๋“ค๊ธฐ - ํ”„๋กœ์ ํŠธ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์ด๋‚˜ ๋นŒ๋“œ์‹œ๊ฐ„ ๊ฐ์†Œ ์ธก๋ฉด์—์„œ ๊ณตํ†ต์ธ ์ปดํฌ๋„ŒํŠธ๋กœ ๋บด๋Š”๊ฒŒ ์ข‹๋‹ค. ๋˜ํ•œ ํ˜‘์—…ํ•  ๋•Œ๋„ ๋” ์ข‹๋‹ค. React Query - ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ๋•์Šค ๋ฆฌ์ฝ”์ผ์—์„œ ์ €์žฅํ•˜๋ฉด ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€” ๋•Œ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ request๋ฅผ ๋ณด๋‚ธ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ MDN ๊ด€๋ จํ•œ ์„ค๋ช…์„ ๋“ค์—ˆ๋‹ค. ํŒ€ํ”„๋กœ์ ํŠธ์— ๊ด€ํ•ด ์ฐพ์•„๋ดค๋‹ค ํ”„๋ก ํŠธ์—”๋“œ์˜ ๊ฒฝ์šฐ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๊ณ  ํ•œ๋‹ค. ์ข‹์€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณด๋Š” ๊ฒƒ์ด ์ค‘์š”. ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ. ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ๊ณต๋ถ€ํ•˜์…จ๋˜ ๊ฒฝํ—˜ -- ๊ณต์‹๋ฌธ์„œ ํ€ต์Šคํƒ€ํŠธ -> ํ”„๋กœ์ ํŠธ ์ ์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ์–ด๋А์ •๋„ ๋น„์Šท๋น„์Šท ๋ฆฌ์•กํŠธ ์ฟผ๋ฆฌ ์™œ ์ƒ๊ฒผ๋Š”๊ฐ€ ๋‹ค๋ฅธ ๊ฑด ๋ญ๊ฐ€ ์žˆ๋Š”๊ฐ€ ์ด๊ฑด ์“ธ๋งŒํ•œ๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ..
ยท TIL
enum Alphabet{ A, B, C, D, } console.log(Alphabet.A) // 0 console.log(Alphabet.B) // 1 console.log(Alphabet.C) // 2 console.log(Alphabet.D) // 3 ์ด๊ฒŒ ๋์ด๋‹ค ใ…Ž
ยท TIL
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธํ˜• ์ข…๋ฅ˜ ํƒ€์ž… ๋ฌธ์ž์—ด string ์ˆซ์žํ˜• number ๋ถˆ๋ฆฐํ˜• boolean undefined undefined null null ๋ฐฐ์—ด๊ณผ ํŠœํ”Œ const cart: string[] = []; cart.push('c001'); cart.push('c002'); // ๋ฐฐ์—ด์˜ ๋ฐฐ์—ด const carts: string[][] = [ ['c001', 'c002'], ['c003'], ]; // ํŠœํ”Œ let mySize: [number, number, string] = [175, 30, 'L']; ๊ฐ์ฒด ํƒ€์ž… let product: { id: string; name: string; price: number; membersOnly?: boolean; // ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ ํ”„๋กœํผํ‹ฐ sizes: string[]..
ยท TIL
์ปดํฌ๋„ŒํŠธ๋กœ ๋‚˜๋ˆŒ ๋•Œ ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ๋ง์„ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— staticํ•˜๊ฒŒ ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์œ„ ๊ฐ™์€ ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐ์„ ํ–ˆ๋‹ค. ํ˜„์—…์—์„œ๋Š” ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์“ฐ๋‚˜? ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ์“ธ๊นŒ? [๊ธ€์ˆ˜์ •] ์ฝ”๋“œ๋ฅผ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค. ์ด ์ฝ”๋“œ๋Š” ์ž˜ ์ƒ๊ฐํ•˜๊ณ  ๋งŒ๋“  ์ฝ”๋“œ๋ผ๊ณ  ํ•˜์…จ๋‹ค. ์•„๋ฌด๋ž˜๋„ ์ปดํฌ๋„ŒํŠธ ์ž์ฒด๋Š” staticํ•œ ์Šคํƒ€์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
1์ฐจ ์ž‘์—… ํšŒ๊ณ  2์ฃผ์ฐจ ๋ฉ˜ํ† ๋ง์„ ๋ฐ˜์˜ํ•˜์—ฌ ์œ„์™€๊ฐ™์ด ๋ฉ”์ธํŽ˜์ด์ง€๋ฅผ ์ดํ‹€๋งŒ์— ์™„์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด์ „๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ›จ์”ฌ ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•ด์กŒ๋‹ค. ์—ญ์‹œ TopDown ๋ฐฉ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๋‹ˆ ์ฝ”๋“œ์˜ ๊ตฌ์„ฑ์ด ๋” ์™„๋ฒฝํ•ด์ง€๊ณ  ์™„๋ฒฝํ•ด์ง€๋‹ˆ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ๋„ ์žฌ๋ฐŒ๋‹ค. ์ด์ „์— bottom up ๋ฐฉ์‹์œผ๋กœ ํ–ˆ์„ ๋•Œ๋Š” ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ์—‰๋ง์ด๊ณ  ๋„ค์ด๋ฐ๋„ ์•„๋ฌด๋Ÿฐ ๊ทœ์น™์—†์ด ๋‚œ์žกํ–ˆ์—ˆ๋‹ค... (๋ฐ˜์„ฑ) recoil์„ ์“ฐ๋ฉฐ.. recoil์„ ์‚ฌ์šฉํ–ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚˜๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐœ๋ฐœํ• ๋•Œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ  ๋†“์•˜๋‹ค. ์„œ๋กœ ๋ถ€๋ชจ ์ž์‹ ๊ด€๊ณ„๋„ ์•„๋‹Œ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์ƒ๊ฒผ๋‹ค. ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ๋งํ•˜์ž๋ฉด ์ž”๋””๋ฅผ ํด๋ฆญํ•  ๋•Œ ๋‹ฌ์„ฑ ๊ณผ์ •์˜ ์›” ์ผ์ด ๋ฐ”๋€Œ์–ด์•ผ ํ–ˆ๋‹ค. ์ด ํ…์ŠคํŠธ๋Š” index.tsx์— ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ธฐ์กด์˜ react ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๋ž€ ์–ด๋ ต๋‹ค. ๋ฌผ..
ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ ์žก๋Š”๋ฒ• ๊ณตํ†ต๋œ ๋ถ€๋ถ„์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค์ž! ๋ณ€ํ˜•์ด ํ•„์š”ํ•˜๋‹ค๋ฉด props๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปค๋ฐ‹๋ฉ”์„ธ์ง€ gitmoji ํ•œ๊ธ€๋กœ ์ž‘์„ฑํ•ด๋„ ๋œ๋‹ค. ๊ณผ์ œ goalItem ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ, ์ž”๋””๋ฐญ ๊ตฌ์„ฑํ•˜๊ธฐ
์˜ค๋Š˜ ํ•ดํ”ผํ•˜๊ฒŒ ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๊ฐ€ next.js๋กœ ์ธํ•ด ๋‹นํ™ฉ์„ ์ข€ ํ•˜์˜€๋‹ค. ๋ถ„๋ช… ์˜ˆ์˜๊ฒŒ ์ž˜ ์ •๋ฆฌ๊ฐ€ ๋˜์–ด ์žˆ๋˜ ๊ฒƒ์ด ์ƒˆ๋กœ๊ณ ์นจ๋งŒ ํ•˜๋ฉด ์Šคํƒ€์ผ์ด ์ ์šฉ์ด ์•ˆ ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋˜ํ•œ ์˜ค๋ฅ˜๋ฉ”์„ธ์ง€๋Š” ์œ„์™€ ๊ฐ™๋‹ค. ์ด๋Š” ๋ช…๋ฐฑํ•œ next.js ์ด์Šˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด ๋ดค๋‹ค. ์œ„ ์ฝ”๋“œ์—์„œ shift๋Š” state์ด๋‹ค. next.js ์„œ๋ฒ„์—์„œ styled-components์˜ shift๋ฅผ ์ธ์‹ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ด๋‹ค. ์ € ๋ถ€๋ถ„์„ ์–ด๋–ป๊ฒŒ ๊ณ ์น˜๋ฉด ์ข‹์„๊นŒ ๋‚˜์˜ ๋กœ์ง์„ ์œ ์ง€ ํ•˜๋ฉด์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ? state๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„์—์„œ์™€ ๋ธŒ๋ผ์šฐ์ € ๊ฐ๊ฐ์—์„œ styled-components์˜ ํ•ด์‹œ๊ฐ’์ด ๋‹ฌ๋ผ์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์˜€๋‹ค. babel-plugin-styled-components๋ฅผ ์„ค์น˜ํ•˜๊ณ  babelrc๋ฅผ ๋งŒ๋“ค์–ด ์œ„์™€ ๊ฐ™์ด ..