일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 스코프
- github
- history API
- Code States
- section태그와 article태그의 차이점
- CSS 박스모델
- javascript
- GIT
- BOM
- display와 visibility
- 코드스테이츠
- Scope
- HTML요소
- 외계행성의 나이
- opacity
- 시맨틱
- flex box
- block 박스
- CSS Object Model
- 티스토리챌린지
- CSS 스타일
- HTML5문서
- Til
- 객체지향프로그래밍
- 템플릿 문자열
- placeholder
- 깃허브
- 프로그래머스
- overflow: hidden
- 오블완
- Today
- Total
해말그미의 코딩공부
Petflix - History API 라우팅 본문
🌼 SPA( Single Page Application )에서 History API 라우팅을 많이 쓰는 이유?
1. SEO에 유리 - 해시(#)이 포함되지 않기 때문에 깔끔한 URL 구조를 제공할 수 있고, SEO 최적화에 도움이 된다.
2. SPA에 최적화 - 새로고침하지 않고도 URL을 동적으로 변경할 수 있으며, 브라우저의 "뒤로 가기" 및 "앞으로 가기" 버튼도 자연스럽게 작동한다.
3. 프레임워크와 호환성 - React의 react-router-dom, Vue의 vue-router 같은 라우팅 라이브러리들이 History API를 기본적으로 지원한다. 이를 통해 복잡한 라우팅을 쉽게 구현할 수 있고, 관리도 용이하다.
🌼 HTML 코드
<ul class="nav__wrapper">
<li class="nav__watchHistory">
<button class="nav__icon">♥</button>
<button class="nav__menu" data-path="watch-history">시청 기록</button>
</li>
<li class="nav__watchLaterVideos">
<button class="nav__icon">♥</button>
<button class="nav__menu" data-path="watch-later">
나중에 볼 동영상
</button>
</li>
<li class="nav__likedVideos">
<button class="nav__icon">♥</button>
<button class="nav__menu" data-path="liked-videos">
인기 동영상
</button>
</li>
</ul>
data-path라는 HTML데이터셋 속성을 사용했다. HTML 요소에 추가 정보를 저장할 수 있는 방법이다.
data-* 형식의 속성은 HTML 표준으로, 원하는 데이터를 자유롭게 저장하고 JavaScript로 접근할 수 있다.
data-* 속성 값에 접근 하는 방식은 getAttribute, dataset을 사용하는 방법이 있다.
🌼 선택된 경로에 맞는 콘텐츠를 보여주는 JS
//navigate.js
export function navigate(state){
const content = document.querySelector(".thumbs__wrapper");
switch (state.path){
case 'watch-history':
content.innerHTML = "<div>안녕하세요</div>";
break;
case 'watch-later':
content.innerHTML = "<div>안녕하세요1</div>";
break;
case 'liked-videos':
content.innerHTML = "<div>안녕하세요3</div>";
break;
}
}
🌼 네비게이션 버튼들에 클릭 이벤트를 추가하는 JS
//navigation.js
import { navigate } from "./navigate.js";
export function setupNavigation() {
document.querySelectorAll('.nav__menu').forEach(button => {
button.addEventListener('click', () => {
const path = button.getAttribute('data-path'); // '/watch-history'
const state = { path };
// URL 변경
history.pushState(state, '', path);
// 화면 내용 업데이트
navigate(state);
});
});
// 뒤로 가기/앞으로 가기 버튼 처리
window.addEventListener('popstate', (event) => {
if (event.state) {
navigate(event.state);
} else {
navigate({ path: '/' }); // 기본 경로
}
});
}
👉 JavaScript의 history.pushState() 메서드
브라우저의 주소창에 표시되는 URL을 변경하면서도 페이지 전체를 다시 로드하지 않고, 브라우저의 기록에 새로운 상태를 저장할 수 있게 해준다.
이때 pushState의 첫 번째 인자로 state 객체를 넘겨준다.
state 객체는 페이지의 현재 상태를 나타내는 정보를 담고 있고, 나중에 사용자가 뒤로 가기나 앞으로 가기 버튼을 눌렀을 때 이 정보를 바탕으로 페이지 상태를 복원할 수 있게 해준다.
👉 popstate 이벤트
사용자가 브라우저의 "뒤로 가기" 또는 "앞으로 가기" 버튼을 눌렀을 때 발생한다.
이 이벤트가 발생할 때, 이전 페이지로 돌아가거나 앞으로 갔을 때 저장된 state 객체가 event.state로 전달된다. 이 state는 이전에 pushState로 저장한 상태 정보이다.
참고 https://inpa.tistory.com/entry/JS-%F0%9F%93%9A-HTML-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8Bdata-%EC%86%8D%EC%84%B1
🌐 html의 data-속성 사용법 완벽 가이드
HTML 데이터셋 속성 HTML의 데이터셋 속성은 커스텀 사용자 속성을 DOM 요소에 저장하는데 표준화된 방법을 제공한다. 한마디로 자바스크립트에서 변수를 사용하듯이, 일종의 html의 변수 역할이라
inpa.tistory.com
'petflix' 카테고리의 다른 글
Petflix - 유튜브 프로필 사진 (API 호출 함수) (0) | 2024.11.28 |
---|---|
API로 가져온 데이터를 상태에 저장해야 하는 경우(useEffect) (0) | 2024.11.21 |
Petflix - youtube API(javascript) (0) | 2024.10.19 |
Petflix - display와 visibility (0) | 2024.10.12 |
petflix : document.addEventListener("DOMContentLoaded") (2) | 2024.09.29 |