하고있는 프로젝트가 점점 복잡해짐에 따라 라우팅 처리, 앞으로가기/뒤로가기 처리도 점점 난이도가 높아져갔다.
특히 앞으로가기뒤로가기 처리를 하는데 있어서 햇갈렸던 개념이
바로 history.replaceState()와 history.pushState() 그리고 popstate 였다.
일단 history.replaceState()와 history.pushState() 이 두 가지 부터 살펴보면
이 두 개는 브라우저 히스토리 api에서 제공하는 중요 메소드이다.
페이지나 상태를 히스토리에 남기는 방식인데 그 방식을 푸쉬할 것이냐 리플레이스 할 것이냐의 차이이다.
파라미터에는 위 구조의 인자들이 들어가는데 주로 state와 url위주로 들어간다.
history.pushState()를 하게되면 히스토리를 추가하게 되고
history.replaceState()를 하게되면 최근 히스토리를 해당 스테이트로 리플레이스 시키게 된다.
예를들어 이런식으로 히스토리를 남겼다고 한다면
리플레이스 스테이트 발생 시 페이지2라는 스테이트가 페이지2-업데이티드로 대체가 된다.
저렇게 쭉 진행했다고 한다면 페이지 3에서 뒤로가기를 쭉 진행하면
페이지3-페이지2업데이트-페이지1로 가게 된다. 즉 페이지2는 페이지2업데이트로 대체된 것.
popstate는 위 둘과는 약간 개념이 다른데
브라우저에서 히스토리 탐색 시(앞으로가기/뒤로가기) 실행되는 이벤트이다.
이렇게 이벤트리스너와 함께 이벤트 실행이 되면 히스토리 변경을 감지하여 적절한 상태를 복원해준다.
이 세가지가 잘 작동하여야 SPA 라우팅과 히스토리 관리가 가능해지는 것.
'나의 개발 일지' 카테고리의 다른 글
자바스크립트로 PDF 다운로드, 프린트 기능 구현하기 (2) | 2025.01.28 |
---|---|
자바스크립트를 이용한 모달(Modal) 창 켜고 끄기 (3) | 2025.01.28 |
디자인 마켓플레이스 - 주요기능 1차 개발 + 스켈레톤 + 기본 예외처리 적용 (0) | 2025.01.28 |
웹컴포넌트를 파라미터를 통해 콘텐츠 제어하기 (0) | 2025.01.21 |
디자인 마켓플레이스 - 주요기능 1차 개발 완료 (0) | 2025.01.20 |