์ „์ฒด ๊ธ€

์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘ ์ž…๋‹ˆ๋‹ค
๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ IntersectionObserver๋ž€ ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•  ๋•Œ ์Šคํฌ๋กค ์ด๋ฒคํŠธ ๋ณด๋‹ค๋Š” ์„ฑ๋Šฅ์ƒ์˜ ์ด์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œ ์Šคํฌ๋กค์„ ๊ตฌํ˜„ํ•  ๋•Œ ๋งŽ์ด๋“ค ์“ฐ๋Š” ๊ธฐ์ˆ ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์œ„ ํŽ˜์ด์ง€๋ฅผ ์Šคํฌ๋กค ํ•  ๋•Œ ๋งํฌ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋ถ€๋ถ„์ด ๋ณด์ด์ง€ ์•Š์„๋•Œ ์ด๋ฅผ ์ตœํ•˜๋‹จ์— ๊ณ ์ •์‹œํ‚ค๋ผ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด์—ˆ๋‹ค. ๋˜ ์œ„์ฒ˜๋Ÿผ footer๊ฐ€ ๋ณด์ธ๋‹ค๋ฉด ์ด๋ฅผ ๋ณด์ด๊ฒŒ ํ•˜๋ฉด ์•ˆ๋˜์—ˆ๋‹ค. ์ฒ˜์Œ ์ž‘์„ฑํ•œ ์ฝ”๋“œ useEffect(() => { const observer = new IntersectionObserver( (entries, observer) => { entries.forEach((entry) => { if (entry.target.id === "mainEntry") { if (!entry.isIntersect..
์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚˜๋Š” ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์ฝ”๋”ฉ์„ ํ•ด์™”๋‹ค. ์ด์ œ๊ป ๋‚˜๋Š” ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์ฝ”๋”ฉ์„ ํ•ด์™”๋‹ค. ๋ณต์žกํ•˜๊ฒŒ ์ฝ”๋”ฉํ•˜๋Š” ๊ฑธ ์‹ซ์–ดํ•ด์„œ ์ตœ๋Œ€ํ•œ ๋‚ด๊ฐ€ ๋ณด๊ธฐ์— ์ง๊ด€์ ์œผ๋กœ ์ฝ”๋”ฉ์„ ํ•œ ๋‹ค์Œ์— ๋ฆฌํŒฉํ† ๋ง์€ ์ •๋ง ๊ฐœ๋‚˜ ์ค˜๋ฒ„๋ ธ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ์Šต๊ด€ ํƒ“์— ์š”์ฆ˜์— ์„ฑ์žฅํ•˜๋Š” ๋Š๋‚Œ์ด ๋“ค์ง€ ์•Š์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ์˜ค๋Š˜ ์ฝ”๋“œ์ž‡ ํŒŒํŠธ3 ๋ฉ˜ํ† ๋ง ์‹œ๊ฐ„์— ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์ž์‹ ๋“ค์ด ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ ๊ฒช์—ˆ๋˜ ๊ฒฝํ—˜์„ ๋งํ•˜์ง€๋งŒ ๋‚˜๋Š” "์ตœ๋Œ€ํ•œ ๋‹จ์ˆœํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๊ณ  ๋ฆฌํŒฉํ† ๋ง๋„ ํ•˜์ง€ ์•Š์•„ ์ด๋ฅผ ๊ณ ์ณ์•ผ ํ•œ๋‹ค" ๋ผ๋Š” ๋ง ๋ฟ์ด์—ˆ๋‹ค. ์‚ฌ์‹ค ์ด์ „๊นŒ์ง€๋Š” ๊ฐ•์˜ ๋“ฃ๊ธฐ์—๋งŒ ์ง‘์ค‘ํ•˜์—ฌ ๋ญ”๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด ๋ณธ ๊ฒฝํ—˜์ด ์ •๋ง ์ „๋ฌดํ•˜๋‹ค ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์งœ๋ณด์ง€ ์•Š์•˜๋‹ค.. ์†”์งํžˆ! (๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ณ ๋ฏผ์„ ํ•˜๋Š”๊ฒŒ ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค) ์•ž์œผ๋กœ๋Š” *๋งŽ์ด* ๋งŒ๋“ค๊ณ  ๋‹ค๋ฅธ ์ข‹์€ ์ฝ”๋“œ๋ฅผ *๋งŽ์ด* ์ฐธ๊ณ ํ•˜์ž ์ด์ œ๋Š” ๋‹จ์ˆœ ๊ตฌ..
์‚ฌ๊ฑด์˜ ๋ฐœ๋‹จ ์œ„์˜ ๋กค๋งํŽ˜์ดํผ์— ์žˆ๋Š” ์ € ๋ฉ”์‹œ์ง€๋“ค์„ ์‚ญ์ œ๋ฅผ ํ•ด์•ผ ํ–ˆ๋‹ค. ํœด์ง€ํ†ต ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์„œ๋ฒ„์— delete ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋ณด๋‚ด์ง€๊ณ  ๊ทธ ์ดํ›„์—๋Š” ๋กค๋งํŽ˜์ดํผ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ์‹œํ‚จ๋‹ค. ์œ„๊ฐ€ ๋ฐ”๋กœ ๋กค๋งํŽ˜์ดํผ ํŽ˜์ด์ง€์ด๋‹ค. ํ•˜์ง€๋งŒ ์‚ญ์ œ๋ฅผ ํ•˜๊ณ  ์ด ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ์‹œํ‚ค๋‹ˆ ์‚ญ์ œ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋งˆ๋„ react-router์˜ navigate๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ์‹œ url์€ ๋‹ค๋ฅด์ง€๋งŒ ๊ฐ™์€ paper ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•ด์„œ (์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„ ์–ด์ฉ” ์ˆ˜ ์—†์—ˆ์Œ) useEffect๊ฐ€ ๋™์ž‘์„ ์•ˆํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์™œ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ๋ƒ๋ฉด ๋‹ค๋ฅธ ํŒ€์›์ด postํŽ˜์ด์ง€์—์„œ ๋กค๋งํŽ˜์ดํผ๋ฅผ ์ž‘์„ฑ์„ ํ•˜๊ณ  ๋กค๋งํŽ˜์ดํผ ํŽ˜์ด์ง€์— ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋ ๋•Œ๋Š” useEffect๊ฐ€ ์‹คํ–‰๋˜์—ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ณ„๋กœ์ธ ๋ฐฉ๋ฒ• 1 ๋ฉ”์„ธ์ง€ ์‚ญ..
์œ„๋Š” ์Šคํ”„๋ฆฐํŠธ 1๊ธฐ ํŒ€์›๋“ค์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด๋‹ค๊ฐ€ ๋ฐœ๊ฒฌํ•œ ์ฝ”๋“œ์ธ๋ฐ ์šฐ๋ฆฌ ํŒ€์ด ์ง„ํ–‰์ค‘์ธ ๋ฐฉ์‹๋ณด๋‹ค ๋” ๋ง˜์— ๋“ค์—ˆ๋‹ค. ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๋Š” ์•ž์— S๋ฅผ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒŒ ์ข‹์•˜๋‹ค ์ปดํฌ๋„ŒํŠธ๋ž‘ ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ตฌ๋ถ„์ด ์•ˆ๋˜์—ˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ํ™œ์šฉํ•˜๋ฉด ๋„ˆ๋ฌด ์ข‹์„ ๊ฒƒ์ด๋‹ค. ์•„๋‹ˆ ์™œ ์ด๊ฑธ ์ƒ๊ฐ์„ ๋ชปํ–ˆ์„๊นŒ... ๊ทธ๋ฆฌ๊ณ  ์Šคํƒ€์ผ๋“œ ์ปดํฌ๋„ŒํŠธ์— prop์„ ๋„˜๊ฒจ์ค„๋•Œ $๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๋„ ๊นŒ๋จน์–ด์„œ ์ฝ˜์†”์ฐฝ์— ์—๋Ÿฌ๋ฅผ ๋ด์•ผ ํ–ˆ๋‹ค.... ์ด๋Ÿฐ ๋ถ€๋ถ„๋„ ์‹ ๊ฒฝ์“ฐ๋ฉด ์ข‹์„ ๊ฒƒ์ด๋‹ค. ์ด์ œ 1์ฃผ์ผ ๋™์•ˆ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๋‹ˆ ์ด ๋ถ€๋ถ„์„ ํŒ€์›๋“ค์—๊ฒŒ ๋งํ•ด์ค˜์•ผ ๊ฒ ๋‹ค. ๋ฆฌํŒฉํ† ๋งํ•  ๋ถ€๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1. ์ปดํฌ๋„ŒํŠธ ๋ณ„๋กœ ํŒŒ์ผ ํ˜•์‹์ด ๋„ˆ๋ฌด ํ†ต์ผ์ด ์•ˆ๋˜์–ด ์žˆ๋‹ค. -> ์˜ˆ์‹œ) ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋Š” index.js๊ฐ€ ์žˆ๊ณ  ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๋Š” ์—†๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ„ ์ด๋ฆ„ ์ค‘๋ณต์ด ์žˆ๋Š”๋ฐ ํด๋” ๊ตฌ์กฐ๊ฐ€ ์ด๋“ค์˜..
ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์ค‘์— popOver๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ absolute๋ฅผ ์ฃผ์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  popOver๊ฐ€ ๋‚˜ํƒ€๋‚ ๋•Œ ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋„๊ตฌ๋กœ ์Šคํƒ€์ผ์„ ๋ณด์•„๋„ ์•„๋ฌด๋Ÿฐ ๋ณ€ํ™”๊ฐ€ ์—†๋Š”๋ฐ ์™œ ๋ ˆ์ด์•„์›ƒ์ด ๋ฐ€๋ ค๋‚˜๋Š” ๊ฑธ๊นŒ? ์ด ๋ฌธ์ œ๋Š” ๊ฒ€์ƒ‰ํ•˜๊ธฐ์—๋Š” ์–ด๋–ค ํ‚ค์›Œ๋“œ๋กœ ํ•ด์•ผํ• ์ง€ ์• ๋งคํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ด๊ฒƒ์ €๊ฒƒ ๋งŒ์ ธ๋ณด๋ฉฐ ํ•ด๊ฒฐํ–ˆ๋‹ค Relative ๋œ ์š”์†Œ: Contents์˜ ์ง๊ณ„์ž์‹์œผ๋กœ Popover๋ฅผ ๋„ฃ์—ˆ๋”๋‹ˆ ํ•ด๊ฒฐ๋๋‹ค!
์™œ ์ด๋Ÿฐ ๊ธ€์„ ์ ๋‚˜์š”? ๊ฐœ๋ฐœ ๋™์•„๋ฆฌ ์šด์˜์ง„์œผ๋กœ ์ฐธ์—ฌํ•˜๊ฒŒ ๋๋Š”๋ฐ ์œ„์˜ ํˆฌ๋‘๋ฉ”์ดํŠธ๋ฅผ ํด๋ก ์„ ํ•ด์•ผ ํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ด๊ฑธ ์–ด๋Š์ •๋„ ํด๋ก ํ•˜๋ฉด์„œ ์–ด๋ ค์› ๋˜ ์ ์„ ์ ๊ณ ์ž ํ•œ๋‹ค. ์ด๋Ÿฐ๊ฒŒ ์–ด๋ ค์› ์Œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์ œ๊ณต๋ฐ›์€ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด ์•ฑ์„ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ž…ํ•  ์ˆ˜ ๋ฐ–์— ์—†์—ˆ๊ณ (todos๋ฐ์ดํ„ฐ ๋•Œ๋ฌธ), ๋ฐฑ์—”๋“œ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด ์ข€ ์ œํ•œ์ ์ด์—ˆ๋‹ค (ํŠน์ • ๋ชฉํ‘œ์˜ ํ•ด๋‹นํ•˜๋Š” ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ์–ป์–ด์˜ฌ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ์Œ). ๊ทผ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฐฑ์—”๋“œ ํ•œํ…Œ ์ด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ๋„ ๋ณ„๋กœ์ธ๊ฒŒ ๋‚˜์ค‘์— ๋ชฉํ‘œ๊ฐ€ 100๊ฐœ ์ •๋„ ๋œ๋‹ค๋ฉด 100๊ฐœ์˜ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋œ๋‹ค.. ๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ ๋ฐ›์•„์˜จ todoList๋ฅผ UI์˜ ํ•„์š”๋Œ€๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค. recoil์˜ selector๋ฅผ ์ ๊ทน ํ™œ์šฉํ–ˆ๋‹ค. react-query ์‚ฌ์šฉ์„ ์ข€ ..
๋‚˜๋Š” vscode๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ–ˆ๋‹ค. ์œ„์—์„œ ๋งํ•œ๋Œ€๋กœ npm install -g eslint eslint๋ฅผ ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜ํ•œ๋‹ค. eslintrc๋ฅผ ์ ๋Š”๋‹ค.
์˜ค๋Š˜์€ ์ฝ”๋“œ์ž‡ ๋ถ€ํŠธ์บ ํ”„์—์„œ ๋ฐฐ์šด fetch,ํ”„๋กœ๋ฏธ์Šค์— ๋Œ€ํ•œ ๋‚˜์˜ ์ง€์‹์„ ์‹œํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‚˜๋Š” 404 ์‘๋‹ต์ด๋ฉด ๋‹น์—ฐํžˆ ๋ฆฌํ„ด๋˜๋Š” ํ”„๋กœ๋ฏธ์Šค ๊ฐ์ฒด๊ฐ€ rejected์ƒํƒœ๊ฐ€ ๋  ์ค„ ์•Œ์•˜๋‹ค. ํ•˜์ง€๋งŒ ์•„๋‹ˆ์—ˆ๋‹ค. https://stackoverflow.com/questions/39297345/fetch-resolves-even-if-404 fetch resolves even if 404? Using this code : fetch('notExists') // { if(!res.ok){ if(res.status === 404){ throw new Error(''); } } res.json(); }) //์ƒ๋žต .catch() ๋”ฐ๋ผ์„œ ๋”ฐ๋กœ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„๊ฐ™์ด 404๋ฅผ ๋งŒ๋‚ฌ์„๋•Œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์œ„๋Š” ์ฑ—์ง€..
๊น€ํƒœ์ง„
My Dev History๐Ÿ’ป