Today, What I learned? Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์๊ฒ ๋์๋ค. ์ด์ ์๋ ๋์ง์ ๋ค์ด๋ ๋ดค์ง๋ง ์ด๋ฒ ๊ธฐํ๋ก ์ ๋๋ก ์ ํ๊ฒ ๋์๋ค๋ ๋ง์ด ๋ ๋ง๊ฒ ๋ค. Axios๋ฅผ ์๊ณ ๋๋ fetch์ ์ด๋ค ์ฐจ์ด๊ฐ ์๊ธธ๋? Axios๊ฐ ์ฑ๋ฅ์ด ๋ ์ข์๊ฐ?? ๊ฐ์ ๊ฒ๋ค์ด ๊ถ๊ธํด์ ธ์ ํ๋ฒ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. Axios ๊ณต์๋ฌธ์์์๋ 'Axios๋ node.js์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ Promise ๊ธฐ๋ฐ HTTP ํด๋ผ์ด์ธํธ ์ ๋๋ค.' ๋ผ๊ณ ์๊ฐ๋ฅผ ํ๊ณ ์๋ค. ์ฆ Promise๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTTP๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ๋น๋๊ธฐ๋ก ํต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ์๋์ ๊ฐ์ ํค์๋๋ก ์ค์นํ ์ ์๋ค. npm์์ ์ฌ์ฉํ ๊ฒฝ์ฐ $ npm install axios yarn์์ ์ฌ์ฉํ ๊ฒฝ์ฐ $ yarn add axios ๊ณต์ ๋ฌธ์๋ ์ด์ชฝ์์ ํ..
Today, What I learned? ์ ์ฒด์ ์ธ ๊ณผ์ ๋ฆฌ๋ทฐ๋ฅผ ๋ฃ๊ณ , ๋๋ค ํ๊ฒ ๋ฝํ ๋ค๋ฅธ ๋ถ๋ค์ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ์ฝ๋๋ฅผ ๋ณด๋ค ๋ณด๋ ๋ด ์ฝ๋์์ ๊ณ ์น๊ณ ์ถ์ ๋ถ๋ถ๋ค์ด ์๊ฒผ๋ค! ์ ๊ทธ๋๋ ์ ์ถํ๊ณ ๋ญ๊ฐ... ๋ถ์กฑํ ์ด ๋๋..๐ค ๊ฐ์ ์๊ฐ์ด ๋ค์๋๋ฐ ์ญ์ ๊ฐ๊ธธ์ด ๋ฉ๋ค!.. ์ผ๋จ ์ฐ์ ์ ์ผ๋ก ๋ฆฌํฉํ ๋งํ ๋ถ๋ถ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค. TodoList์ ๋ฟ๋ ค์ฃผ๋ ๋ถํ์ํ props ์ ๊ฑฐ ์ ์๊ฐํ์ง ๋ชปํ์๊น ์ถ์ ๋ถ๋ถ!.. ์ด์ฐจํผ ๋ฆฌ๋์ค๋ก ์ํ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์๊ณ ๋ฆฌ๋์๋ก๋ถํฐ todos ๋ผ๋ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ฟ๋ ค์ฃผ๋๋ฐ, ๊ตณ์ด props๋ก ๋๊ฒจ์ค ํ์๊ฐ ์์๋ค. TodoList ์ปดํฌ๋ํธ๋ก useSelector ํ ์ ์ฎ๊ฒจ์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋ง ํ ์ ์๋๋ก ๋ณ๊ฒฝํ๋ค. ๋ฐ๋ณต๋๋ label, input ์ปดํฌ๋ํธํ ํฌ๋ ์ ๋ ฅ ๋ถ๋ถ..
๋ ๋ฒ์งธ ํฌ๋ ๋ฆฌ์คํธ react-router-dom, styled-components์ redux์ ๋ํด ์ข ๋ ๊ณต๋ถํ ํ์ ๊ธฐ์ด ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ์ ๊ทธ๋ ์ด๋ํด์ ๋ค์ ํ๋ฒ ๋ง๋ค์ด๋ณด๋ ์๊ฐ์ ๊ฐ์ก๋ค. ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ฉฐ UI/UX ์ ์ผ๋ก๋, ๊ธฐ์ ์ ์ผ๋ก ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๋ค๊ณผ ๊นจ๋ฌ์ ์ .. ๊ฐ์ ๊ฒ๋ค์ ํ๊ณ ํด๋ณด๋ ค ํ๋ค. ์์ฑ๋ ํฌ๋๋ฆฌ์คํธ๋ฅผ ๋ฐฐํฌํ ๋งํฌ๋ ์๋! https://todolist-redux-theta.vercel.app/ React App todolist-redux-theta.vercel.app UI/UX ์ง๋๋ฒ์ ๋ง๋ค ๋๋ ๊ฝค ์์ ๋ถ๋ฐฉํ๊ฒ ๋ง๋ค์ด๋ดค์ผ๋ ์ด๋ฒ์๋ ์๊ตฌ๋๋ ํ์ ์ ์งํ๋ ์ฌ์ฉ์์ ํธ์๋ฅผ ์๊ฐํด์ ๋ ์ด์์์ ์ง๋ณด์๋ค. ํฌ๋ ํ๋จ๋ถ์ ๋ฒํผ์ ์ฐ์ ์์๋ฅผ ๋ฐ์ก์ ๋, ์ ์ ์ ์ฅ์์๋ '์๋ฃ'๊ฐ ..
Today, What I learned? redux์ styled-components, react-router-dom์ ์ด์ฉํด์ ์ข ๋ ์ ๊ทธ๋ ์ด๋๋ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋๋ ์ค!.. ์ด์ ๋ณด๋ค ์ปดํฌ๋ํธ๋ฅผ ์ข ๋ ์ธ๋ถํ ํ๋ค๋ณด๋ ๋ฒํผ ์ปดํฌ๋ํธ๋ ๋ถ๋ฆฌํ๊ฒ ๋์๋ค. ๋ฌธ์ ๋ ๋ฒํผ ์ปดํฌ๋ํธ์ ์ ๋ฌ๋๋ ์ฌ๋ฌ ํจ์๋ค์ ์ด๋ป๊ฒ ์คํ์ํฌ ๊ฒ์ด๋!.. ์๋๋ฐ... ๋ฆฌ์กํธ์์ onClick ์ด๋ฒคํธ์ ๋งค๊ฐ๋ณ์๊ฐ ์๋ ํจ์๋ฅผ ์ด๋ป๊ฒ ๋๊ฒจ์ค ๊ฒ์ธ์ง๋ฅผ ์๊ฒ ๋ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณธ๋ค. ๊ธฐ์กด์ ์ฝ๋ type์ ๋ฐ๋ผ์ props๋ก ๋ฐ์์จ ๋ค๋ฅธ ํจ์๋ค์ ์คํ์ํค๋๋ก ํ๊ณ ์ถ์๋ค. ์ ๊ธฐ๊น์ง ์ข์๋๋ฐ, ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋จ์ ๋ฐ๋ผ ํ์ ์ด ์ถ๊ฐ๋๋ค ๋ณด๋ ์ผํญ ์ฐ์ฐ์๋ก๋ ๋ฒ๊ฑฐ์ด ์ํฉ์ด ๋ฐ์.. ๊ณ์ ์ด๋ ๊ฒ? ์ค์ค์ด ์์ธ์ง์ฒ๋ผ? ๊ฐ๋ค๊ณ ? ์ด๋ ๊ฒ ์ฐ๋ ๊ฒ์ ์ผํญ ..
๋ฆฌ์กํธ๋ก ํฌ๋ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ useState์ useRef ํ ๋ง์ ์ด์ฉํด์ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋ค. ๋ฐฐํฌ๋ ์ฃผ์๋ ์๋. https://todolist-phi-rouge.vercel.app/ ๋ค๋ฅธ ํ ์ ์ด์ฉํ์ง ์์๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจ์ ํ์ ๋ ์ ์ง๊ฐ ๋๋ค๊ฑฐ๋.. ์ด๋ฐ ๋ถ๋ถ์ ์๋์ง๋ง! ํ๋์ ๋ฐ๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ํ๋ค๊ฐ ๋ฆฌ์กํธ๋ก ๋ค์ ๋์์ค๋ State๋ ๋ ์์ด ์๋กญ๊ฒ ๋ค๊ฐ์์ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๋ฉฐ ์ข ํค๋งจ ๋ถ๋ถ์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ํฌ๋ ๊ฐ์ฒด์ id๊ฐ ๋ฃ์ด์ฃผ๊ธฐ ํฌ๋๋ง๋ค ๊ฐ๊ฐ์ ์์ด๋๋ฅผ ๋ฌ์์ฃผ๊ธฐ ์ํด์ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์์ง๋ง, useRef ํ ์ ์ด์ฉํด๋ณด์๋ค. useRef() useRef๋ current๋ผ๋ ์์ฑ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค. ์ด๋ ์ธ์๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด, ์ด ๊ฐ์ ์ด๊ธฐ๊ฐ์ผ๋ก current์ ..
Today, What I learned? ์ด๋๋ง ํ๋ก์ ํธ๊ฐ ์คํ๋ฐ ์ ๋ ์๋ค. ๐ ๋์ ๋ด๋น ๊ธฐ๋ฅ์ ์ผ์ถ ๋ง๋ฌด๋ฆฌ ํ ๋ !... ์ค๋์ ํ์ด์ด๋ฒ ์ด์ค์ DB์์ ๋ฐ์ดํฐ๋ฅผ ์ง๊ณํด์ฃผ๋ ํจ์์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ์ฝ์ง์ ๊ฝค ๋ง์ด ํ๊ธฐ๋ ํจ ใ (2์๊ฐ๊ฐ๋..) getCountFromServer getCountFromServer ๋ผ๋ ํ์ด์ด๋ฒ ์ด์ค API๊ฐ ์๋ค. ์ด ๋ฉ์๋๋ ์ค๋ ์ท์ ์ฐ์ด์ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ํจ์์ด๊ณ , ํ์ฌ ๋ฐฑ์๋ ์๋ฒ์์ ์ง์ ์ ์ธ ์๋ต์ ํตํด์๋ง ๋์ํ๋ ํจ์๋ค. ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌ๋ํ๋ค. const coll = collection(db, "cities"); const query_ = query(coll, where('state', '==', 'CA')); const sn..
Today, What I learned? ๋ด ๊ธฐ๋ฅ ๊ตฌํ๋ ํ๊ณ ํ์๋ค ์๋ฌ๋ ๋ด์ฃผ๋ค๋ณด๋ ์ด์ด ๋ น๋ ํ๋ฃจ... ๐ซ ๐ซ ๐ซ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ํ์ด์ด๋ฒ ์ด์ค์์ ์ค์๊ฐ์ผ๋ก DB๋ฅผ ๋ฐ์์ด ํ์ํ ๊ธฐ๋ฅ์ด ์์๋ค. ์ค๋์ ์ด ๋ถ๋ถ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค! ํ์ด์ด๋ฒ ์ด์ค์์ ์ค์๊ฐ์ผ๋ก DB ๋ฐ์ํ๊ธฐ onSnapShot() ์ด๋ผ๋ ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ค. ์ด ๋ฉ์๋๋ ๋ฌธ์ ์ค๋ ์ท์ ์ฆ์ ์์ฑํ๊ณ , ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ๋ค์ ํธ์ถ๋์ด ๋ฌธ์ ์ค๋ ์ท์ ์ ๋ฐ์ดํธํ๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ํ์ด์ด๋ฒ ์ด์ค ๋ฌธ์์์ ํ์ธํด๋ณผ ์ ์๋ค. https://firebase.google.com/docs/firestore/query-data/listen Cloud Firestore๋ก ์ค์๊ฐ ์ ๋ฐ์ดํธ ๋ฐ๊ธฐ | Firebase Firebase Summit..
Today, What I learned? ๋ฐ๋๋ผ JS๋ก SPA๋ฅผ ๊ตฌํํ๋ ํ๋ก์ ํธ ์งํ ์ค!.. ๋ด๋น ํ์ด์ง๋ฅผ ๋งํฌ์ ํ๊ณ , ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์ด๋ฒคํธ ์ผ์ด๋๋ ๊ฒ์ SPA ๋ฐฉ์์ผ๋ก ์ด๋ป๊ฒ ๊ตฌํํ๋๊ฐ.. ๐ค ์ ๋ํด์ ์ข ํค๋งธ๋ ์ง๋ผ ์ค๋์ ์ด๊ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. Cannot read properties of null (reading 'addEventListner') ์ค๋ ๋ง๋ ์๋ฌ. ์ด ์ ์๋ ํ ๋ฒ์ ๋ง๋ ์ ์ด ์๋ ๊ฒ ๊ฐ์ ๋ ์.. ์ผ๋จ ์ ์๋ฌ๋ ์ด๋ฐ ์ด์ ๋ก ๋ฐ์ํ๋ค. html์ด ๋ก๋๋๊ธฐ ์ ์ script๋ฅผ ๋จผ์ ๋ถ๋ฌ์๋ค. ์์ง html์ด ๋ก๋๋๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ addEventListener๋ฅผ ๋ถ์ฌํ DOM์ ์ฐพ์ง ๋ชปํ๋ค. ๊ณ ๋ก null ๊ฐ์ด ๋ฌ๋ค. ์ด ๊ฒฝ์ฐ๋ ๋ณดํต script ํ๊ทธ๋ฅผ ht..
Today, What I learned? ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ ํธ๊ฐ ์์๋ ์ฒซ๋ .. ๐ ๊ธฐํ๊ณผ ์์ด์ดํ๋ ์์ ์ ์ก๊ณ ~ ํ๋ก์ธ์ค์ ์ค๋ ๋์ ๋ํ ๊ฐ์๋ฅผ ๋ค์๋ค. ์ฝ์ง ์์ ๊ฐ๋ ์ธ๋ฐ ๋๋ฆ๋๋ก ํ์ด์ ์ ๋ฆฌํด๋ณธ๋ค. ํ๋ก์ธ์ค? ์ด์์ฒด์ ๋ก๋ถํฐ ํ ๋น๋ฐ์ ์์ ์ ๋จ์๋ฅผ ๋งํ๋ค. ์ด ๊ฐ๊ฐ์ ์์ ๋ค์ ์ด์์ฒด์ ๋ก๋ถํฐ ์์คํ ์์์ ํ ๋น๋ฐ๋๋ฐ, ์์์ด๋ผ๋ ๊ฒ์ CPU ์๊ฐ๊ณผ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค! ์ฝ๊ฒ ๋งํ๋ฉด ํ๋ก์ธ์ค๋ ์คํ๋๊ณ ์๋ ํ๋์ ํ๋ก๊ทธ๋จ์ด๋ค. ์๋์ ๊ฐ์ด ์๋์ฐ์ ์์ ๊ด๋ฆฌ์๋ ๋งฅ์ ํ์ฑ ์ํ ๋ณด๊ธฐ์์ ์คํ๋๊ณ ์๋ ๋ง์ ํ๋ก์ธ์ค๋ค์ ๋ณผ ์ ์๋ค. ํ๋ก์ธ์ค ์ฃผ์๊ณต๊ฐ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ํ๋ก์ธ์ค๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ๋๋ค. ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋์ด ์๋ค. Code ..
Today, What I learned? ํ๋ก์ ํธ ์์์ ์๋๊ณ ํ์ด์ด๋ฒ ์ด์ค ํน๊ฐ์ ๋ค์๋ค..! ํ์ด์ด๋ฒ ์ด์ค์์ ์ ๊ณตํ๋ ๋ง์ ๊ธฐ๋ฅ ์ค์์ ๋ช ๊ฐ์ง์ ๋ํด ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค. ๊ทธ ๋ช ๊ฐ์ง๋ ๋ฐ๋ก Authentication, FireStore, Storage ๋ค!.. ์ ์ด๊ฒ๋ง ๋ค๋ฃจ๋๋ฉด ์ผ๋จ ๋น์ฅ ์ธ ๊ฒ๋ค์ด๊ธฐ ๋๋ฌธ ใ Authentication ์ด ์๋น์ค๋ ํ์ด์ด๋ฒ ์ด์ค์์ ์ ๊ณตํ๋ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ์ํ ์ธ์ฆ ์๋น์ค๋ค. ์๋์ ๊ฐ์ด ๋ค์ํ ๋ฐฉ๋ฒ๋ค์ ์ถ๊ฐํด์ ์ธ์ฆํ ์ ์๋ค. ์ด ์ธ์ฆ ์๋น์ค๋ฅผ ์ด์ฉํด์ ํ์๊ฐ์ , ๋ก๊ทธ์ธ๋ฟ๋ง ์๋๋ผ ํ๋กํ ๊ด๋ฆฌ๊น์ง๋ ๊ฐ๋ฅํ๋ค. authService.currentUser ๋ผ๋ ๊ฐ์ฒด์ ๋ค์ํ ์ ๋ณด๋ค์ด ๋ด๊ฒจ์๊ธฐ ๋๋ฌธ์ด๋ค!.. ํ๋ก์ ํธ ๋ ์ฃผ๊ตฌ์ฅ์ฐฝ ์จ๋จน๋ ๊ฐ์ฒด์ด์ง ์์๊น ์ถ๋ค. Fi..
Comment