Issue ํญ์์ New Issue ํด๋ฆญ์ด์ ์์ฑํ๊ณ Submit new issue์ฐ์ธก ํญ์์ ์ธ๋ถ ์ค์ ๊ฐ๋ฅAssigness: ํด๋น ํ์คํฌ๋ฅผ ๋งก์ ์ฌ๋์ ์ง์ . assign yourself๋ฅผ ๋๋ฅด์๋ฉด ์์ ์ ํ์คํฌ๋ก ๋ง๋ค ์ ์๋ค.Labels: ํ์คํฌ ์นด๋์ ๋ผ๋ฒจ๋งP
\[JS] ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ๋ฐฐ์ด ๋ฐ์ดํฐ ๋ฃ๊ธฐ/๊ฐ์ ธ์ค๊ธฐdata.js ๋ณ์๋ช agoraStatesDiscussions์ผ๋ก ์๋ณธ ๋ฐ์ดํฐ(๋ฐฐ์ด ํํ)๊ฐ ๋ค์ด๊ฐ์๋ค. script.js(6) ์ด๋ ๊ฒ Local Storage์ ๋ค์ด์ค๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ฒคํธ์ ๊ณ ์ ๋์์ ๋ง์์ค๋ค. ์๋ฅผ ๋ค์ด a ํ๊ทธ์ ๊ฒฝ์ฐ ํ์ด์ง ์ด๋์, submit ์ ๊ฒฝ์ฐ ๋ค์ render ๋๋ ๊ฒ์ ๋ง์์ค๋ค. local storage๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด render ์์๋ ์ถ๊ฐ ๋์ค์ปค์ ์ด ์ ์ง๋๋๋ก ํ ํ์๋ event.preventDefau
Redux-ToolkituseAxios ํ ๋ง๋ค๊ธฐ์บ๋ฆฐ๋ (React-calendar, moment)uuid?Redux-Persist (์๋ก๊ณ ์นจ ํด๋ ์ ์ง๋๋ ์ํ ๋ฐ์ดํฐ)https://tooo1.tistory.com/572json-server ์ด์ฉTo Do ๋ฐ
์ฌ๊ธฐ์ ์ค์ ํ ์ด๋ฆ์ด params์ key๋ก ๋ค์ด์จ๋ค.\* console.log(params)์์ธ ํ์ด์ง ์ง์ ์ API ํธ์ถ ์ฃผ์ : URL parameter์ ์ ๊ทผํด ๋ฐ์ดํฐ(question id ์ ๋ณด)๋ฅผ ๋ฐ์์์ ๋ค์ ์ฌ์ฉ
๐ ๋ฐฑ์๋์์ ์ง๋ฌธ ๋ฐ์ดํฐ ์์ ๋ต๋ณ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ธฐ๋ก ํ๋ค. ๐๐ฝ ๊ฐ ํ์ด์ง์ ํด๋นํ๋ ์ง๋ฌธ(+๋ต๋ณ) ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ๐๐ฝ ๋ต๋ณ ๋ถ๋ถ์ ์ง๋ฌธ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ ๊ฐ๊ณตํด์ ์ฐ๋ ๊ฑธ๋ก..!DetailPage.js์์ ๋ฐ์ดํฐ ๋ฐ์์์ ํ์ํ ์ปดํฌ
store๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ค ์์์์ Provider๋ก ๊ฐ์ธ์ค๋ค(1) slice ์ด๋ฆ ์ ํ๊ธฐ ๐(2) ์ด๊ธฐ๊ฐ ์ค์ ํ๊ธฐ(3) ๋ฆฌ๋์ ๋ง๋ค๊ธฐ (๋ฆฌ๋์: action์ type์ ๋ฐ๋ผ ์ํ๋ฅผ ๋ณ๊ฒฝ์ํค๋ ํจ์)์ดํ dispatch์ ์ธ์๋ก ์ก์ ์ ๋ฃ์ด์ค ๋ ์ข ๋ ๊ฐ๋จ
redux-toolkit์ผ๋ก ๊ตฌํํ ๋ถ๋งํฌ ๊ธฐ๋ฅpersistReducer์ ๋ ๋ฒ์งธ ์ธ์๋ก ๋ค์ด๊ฐ ๋ฆฌ๋์ ๋ฌถ์ ๋ง๋ค๊ธฐ๋ชจ๋ ๋ฆฌ๋์๋ค์ ํ๋๋ก ํฉ์น๋ค (์ฌ๊ธฐ์๋ reducers๋ผ๋ ๋ณ์๋ช ์ผ๋ก ์ ์ฅ)persistReducer์ ์ฒซ ๋ฒ์งธ ์ธ์๋ก ๋ค์ด๊ฐ persistConfig
Performance ๋ถ๋ฌธ์ด 52์ ์ผ๋ก ์๋นํ ๋ฎ๋ค.Best Practice, SEO ๋ถ๋ฌธ์ ์ํธํ ํธ์ ๋ก๋์ค..๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด react dev tools ๋ฑ chrome extention์ด ์ฑ๋ฅ ์ธก์ ์ ์ ํ ์์๊ฐ ๋๋ค๊ณ ํ๋ค. react dev tools์ ๋
๋ค๋ฅธ ๋ฒํผ์ ํด๋ฆญ ์ ํด๋น SNS ๊ณต์ ํ์ ์ด ์๋ก ๋จ์ง๋ง URL copy ๋ฒํผ์ ์ฃผ์ ๋ณต์ฌ๊ฐ ์ฑ๊ณตํ์ ์ ์๋ฌด๋ฐ ํ์๊ฐ ์์ด ์ฑ๊ณต ์ ํ์ alert์ ๋์์ฃผ๊ธฐ๋ก ํ๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ alert ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ (์ฑ๊ณต ์, ์๋ฌ ์...)
์ ์ ํด๋๋ธ๋ผ์ฐ์ ์ ์ง์ ์์ธ์ค ๊ฐ๋ฅglobal.css : \_app.tsx์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ์ปดํฌ๋ํธ๋ช .module.css : ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ import ํด์ ์ฌ์ฉ (Home.module.css ๋ฑ)๐๐ฝ styled-components์ ์ฌ์ฉํ๋ฉด ์ ์ญ ์คํ์ผ์ g
Next JS์์ styled-components๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด .barbelrc์ ์์ฑํ๊ณ next/font๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. Syntax error: "@next/font" requires SWC although Babel is be
ํ๋ก์ ํธ์ ์ํ ๋ฏน ๋์์ธ์ ์ ์ฉํ ๊ฒ์ธ์ง์ ๋ํด ํ์๋ค ๊ฐ์ ์๋นํ ์๊ฒฌ ์ฐจ์ด๊ฐ ์์๋ค. ์ถฉ๋ถํ ๊ณ ๋ฏผ ์์ด ๋์ ํ๋ฉด ์คํ๋ ค ํ๋ก์ ํธ ์งํ์ ๋ฐฉํด๊ฐ ๋ ์ ์๋ค๋ ์๊ฒฌ๋ ์์๊ณ , ์ค์ ๋ก ์ด๋ฏธ ์ํ ๋ฏน ๋์์ธ์ ํ๋ก์ ํธ์ ์ ์ฉํด ๋ณธ ๋ง์ ์ฌ๋๋ค์ด ์์ฌ์ด ์ ์ ๋ํด
๋ฐ์ดํฐ๊ฐ inactive ์ํ๊ฐ ๋ ํ cacheTime ๋์์ ํด๋น ๋ฐ์ดํฐ์ cache๊ฐ ์กด์ฌํ๋ฏ๋ก ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๊ฒฝ์ฐ(refetch ์ด๋ฒคํธ ํน์ ํธ๋ฆฌ๊ฑฐ ๋ฐ์ ์) ๐isFetching๐ ์ํ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํฐ๊ฐ fetch ๋๋ค. ์ด ๋ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ fe
์์ธ ํ์ด์ง๋ฅผ ๋์ ๋ผ์ฐํ (\[id].tsx)์ผ๋ก ๋ง๋ค๊ณ ๊ฐ ํ์ด์ง์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ API ์์ฒญ์ ํ์ด์ง ๊ฒฝ๋ก( router.query ๊ฐ์ฒด)๋ฅผ ์ด์ฉํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ ํ์ด์ง์ ์ ์ํ๊ฑฐ๋ ์๋ก๊ณ ์นจ ํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐ ์คํจํ๋ค. router.que
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, React Query๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ์์์ queryClient์ ์ ๋ฌํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ง์ํ๋ค. ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ prefetchํ๊ณ , ์ปดํฌ๋ํธ์ initialData๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ.Next.js์ getStaticProps ๋๋
์์ธ ํ์ด์ง์์ getServerSideProps๋ฅผ ์ฌ์ฉํด ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ props๋ก ๋๊ฒจ์ฃผ๋ ค๊ณ ํ๋๋ฐ serializing ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. Server ErrorError: Error serializing .dehydratedState.queries
axios๋ก ๋ฐ์์จ ํด๋น ์ฃผ์์ data.์ด ์ค ํ์ํ ๋ถ๋ถ์ property="og:image"์ธ meta ํ๊ทธ์ content์ ๊ฐ์ด๋ค. ํด๋น Input์ onBlur ์ ์คํ๋๋ ํจ์ getLinkMetaData ์ ์ฒด ์ฝ๋ (ํฌ๋กค๋งํด์จ ์ด๋ฏธ์ง ์ฃผ์๋ฅผ image
required : ํ์ ์ฌ๋ถpattern : ์ ํจ์ฑ ๊ฒ์ฌ ์ ๊ท์minmaxminLengthmaxLengthvalidate : ์ง์ ์์ฑํ ์ ํจ์ฑ ๊ฒ์ฌ ํจ์{errors?.input๋ช .type === ์ ํจ์ฑ ๊ฒ์ฌ ํญ๋ชฉ && ์๋ฌ ๋ฉ์์ง ์์} ํํ๋ก ์ฌ์ฉEnter ์ ์ฉ
๋ ์ง ํด๋ฆญํ ๋๋ง๋ค value๊ฐ ํด๋น ๋ ์ง๋ก ๋ณ๊ฒฝ๋๋ค.(onChange๊ฐ setValue์ ์ญํ ) React-Calendar์ styles๋ฅผ import ํ๊ณ ๊ฐ ์ ํ์๋ฅผ ์ฌ์ฉํด ๊ธฐ์กด์ ์คํ์ผ์ ์ค๋ฒ๋ผ์ด๋ํ๋ค.(์ ํ์๋ node_modules > react-calenda
ํ์ด์ง ๋ณ๋ก ์ ์ฉ๋๋ ๋ ์ด์์์ด ๋ค๋ฅผ ๊ฒฝ์ฐ Per-Page Layouts(https://nextjs.org/docs/basic-features/layouts๋ชจ๋ ํ์ด์ง์ FooterMain, Addnew ํ์ด์ง์ Header๋ฅผ ์ ์ฉํ๋ ค๊ณ ํ๋ค.๋ชจ๋ ํ์ด์ง์ ํฌ
mkcert๋ผ๋ ํ๋ก๊ทธ๋จ์ ์ด์ฉํด์ ๋ก์ปฌ ํ๊ฒฝ(๋ด ์ปดํจํฐ)์์ ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ์ ๋ง๋ค ์ ์๋ค.๋ก์ปฌ(๋ด ์ปดํจํฐ)์ ์ธ์ฆ๋ ๋ฐ๊ธ ๊ธฐ๊ด์ผ๋ก ์ถ๊ฐ(localhost๋ก ๋ํ๋๋) ๋ก์ปฌ ํ๊ฒฝ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ง๋ค๊ธฐ๐๐ฝ ์ต์ ์ผ๋ก ์ถ๊ฐํ localhost, 127.0.0.
axios interceptors๋ฅผ ์ฌ์ฉํ๋ฉด then ๋๋ catch๋ก ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์์ฒญ๊ณผ ์๋ต์ ๊ฐ๋ก์ฑ์ ์๋ค.request์์๋ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ ํ๋ ์์ ์ด ๊ฐ๋ฅํ๊ณ response์์๋ ์๋ฒ์์ ๋ฐ์ ์๋ต์ด return ๋๊ธฐ ์ (= then๊ณผ catch๋ก ๋์ด
๊ฒ์ ์คํ ํ ์๋ฃํ์ง ์๊ณ ์ค๊ฐ์ ๋ค๋ฅธ ๋์ด๋๋ก ๋ณด๋๋ฅผ ์์ฑํ๊ฒ ๋๋ฉด isRunning ์ํ๊ฐ ์ฌ์ ํ true์ด๊ธฐ ๋๋ฌธ์ ํ์ด๋จธ๊ฐ ์๋์ผ๋ก ์คํ๋๋ ๋ฌธ์ ์๋ค. create_board์์ state.isRunning = false๋ฅผ ์ถ๊ฐํด ๋ณด๋ ์์ฑ ์๋ง๋ค isRunn