๊ธฐ๋ฅ ์๊ตฌ์ฌํญ 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๋ฅผ ๋ง๋ฌ์๋ ์๋ฌ๋ฅผ ๋ฐ์์์ผ์ผ ํ๋ค. ์๋ ์ฑ์ง..