1. JS 스터디
2. 최종 프로젝트 - 스터디 타임
프로젝트 관련 공부하기
Next.js의 장점
<style jsx>
문법
<style jsx global>
로 쓰면 전역으로 쓸 수 있다network 창에서 api key 안 보이게 하기
getServerSideProps
catchAll url
[...id].js
SEO 최적화
getServerSideProps
를 쓰면 영화 정보가 html에 담겨서 검색 최적화에 도움이 된다.export function getServerSideProps({ params: { params } }) { return { props: { params }, }; }
2. 최종 프로젝트 - 기능 구현
styleComponent에서 semanticTag로 바꾸는데 오류
오류 메시지: "초기 UI가 서버에서 랜더링 된 것과 일치하지 않기 때문에 Hydration이 실패"
Hydration이란?
-> Next.js에서 사전 렌더링된 정적페이지와 번들링된 js파일들이 클라이언트에 보내진다.
-> 브라우저가 페이지를 로드할 때 해당 js코드가 HTML DOM 위에서 다시 rendering 되면서 서로 매칭되는 과정
사전 렌더링(SSR/SSG)된 트리와 브라우저에서 첫번째 렌더링된 트리 사이에 차이가 있을 때 해당 에러가 발생
원인 1
-> html 태그 잘못 사용
ex. p태그 하위에는 div태그가 들어갈 수 없다.
원인 2
하위컴포넌트를 감싸는 태그를 사용할 경우
ex. <div><하위 컴포넌트/></div>
원인 2 해결 - DOM이 로드된 후에 구성요소 렌더링
const [domLoaded, setDomLoaded] =
useState(false);
useEffect(() => {
setDomLoaded(true);
}, []);
return문
{domLoaded && (
<div>
<하위 컴포넌트 />
</div>
)}
원인 2 해결방법을 적용하니 새로운 경고 메시지가 떴다.
원인 1 - 시도 및 해결
body태그는 section의 하위 태그로 쓸 수 없다
MainWrap
스타일 컴포넌트에 body태그를 썼는데 오류메시지body태그는 div태그의 하위태그로 쓸 수 없다