작성
·
195
1
안녕하세요. 강의 잘 보고 있는데요.
저는 본 강의를 '참고'하여 스스로 블로그를 만들고 있는데요.
다름이 아니라, 강의 코드를 보면 게시글 리스트중, 특정 게시글 아이템을 클릭하면 to={slug}하게 되어 있는데요.
그래서 markup의 상세 페이지로 넘어가는데, 이때 렌더링되는게 templates 폴더에 존재하는 post template이고요.
근데 이때 index 화면과 똑같은부분은 import Template from 'components/Common/Template' 에서 import해와서 Template으로 래핑해 놓았는데(index.tsx 컴포넌트도 마찬가지로 Template로 래핑되어 있구요)
여기서 의문은 특정 게시글 아이템을 클릭해서 상세 페이지로 넘어갈 때 SPA처럼 동작하는게 맞을까요?
왜냐하면 보통 리액트로 따지면 최상위 컴포넌트를 Router로 래핑해서 사용하기 때문에 SPA로 동작이 가능해지지만, gatsby에서 사용하는 리액트는 router로 별도로 래핑은 안하는 것 같아서요.
index.tsx를 Template로 래핑하고, Link To를 통해 상세 페이지로 넘어갔을 때도 Template을 래핑 해놓은 거라면, 변화가 필요한 영역만 바뀌는게 아니라 페이지 전체가 처음부터 다시 렌더링되는게 아닌가 싶어서 여쭙습니다
추가적으로, 앞서 말씀드린대로 처음부터 다시 렌더링 하는 경우라면, 상태를 지속적으로 관리하는건 어렵겠지요?
가령, 사이드바에서 depth가 1이상인 폴더 구조를 갖는 항목들이 있고, 각 항목들이 1개 이상의 md문서를 갖고 있을 때, 사용자가 여러 개의 폴더를 open했다가 특정 md문서로 들어가는 경우, 앞서 open되었던 폴더드의 상태를 계속 유지하는 것은 어렵겠쬬?
답변 1
0
안녕하세요, Dumping님!
우선 특정 게시글 아이템을 클릭해서 상세 페이지로 넘어갈 때 SPA처럼 동작하는게 맞는지에 대한 답변부터 드리겠습니다.
해당 부분은 Gatsby보다는 Next.js에 더 가까운 방식입니다.
Next.js는 처음 페이지 접속 시에는 서버 사이드 렌더링을 통해 그려진 웹 사이트를 띄워주고, 그 이후에는 클라이언트 사이드 렌더링을 적용하여 SPA 처럼 동작합니다.
하지만 Gatsby는 정적 사이트 생성기로, 미리 생성된 페이지를 불러와 보여주는 방식이기 때문에 SPA 방식으로 동작한다고 보기는 어렵습니다.
다만 링크를 클릭했을 때 리프레시가 발생하지 않는 것처럼 보이는 이유는 Gatsby 내부적으로 Link 태그가 화면에 보이면 해당 페이지를 Prefetch 하기 때문입니다.
그렇지만 Gatsby Browser API 중, wrapRootElement API를 통해 페이지 간의 상태를 지속적으로 유지할 수 있는 방법이 존재합니다.
해당 방법은 아래 링크를 참고해주세요 :)
https://nichole.is/react-state-between-pages/