728x90
개요
무한 스크롤 구현 후, 사용자가 목록을 쭉 내리다가 특정 목록 아이템에 상세 보기 페이지로 진입 후, '뒤로가기'를 했을 때, 사용자가 보던 스크롤 위치를 그대로 보여주기 위한 기능이 필요했다.
스크롤 위치를 보존하는 방법을 소개한다.
컴포넌트 구조
components
+- List.vue 👈 destroyed 훅에서 store에 스크롤 위치(scrollY) 저장
+- ListItem.vue
pages
+- index.vue 👈 저장된 스크롤 위치로 mounted 훅에서 이동
pages/index.vue
index.vue가 렌더링된 후에 스크롤 위치 이동
export default {
name: 'something',
mounted() {
setTimeout(() => {
window.scrollTo(0, this.$store.state.feedback.scrollHeight || 0);
});
},
// ...
}
components/List.vue
destroyed() {
// 👇 List.vue 컴포넌트가 브라우저 컨텍스트에서 사라질 때 store에 현재 스크롤 높이 저장
this.SET_SCROLL(scrollY);
// 👇 페이지 이동 라우터가 목록 아이템의 상세페이지가 아닌 경우, store에 저장된 관련 state를 모두 날린다.
if (this.$route.name !== 'feedback-id') this.CLEAR_FEEDBACK();
},
728x90
'Vue.js' 카테고리의 다른 글
[vue test] nuxt에서 단위 테스트 발생한 오류 (0) | 2022.08.06 |
---|---|
[vue/test-utils] $route를 사용하는 컴포넌트 테스트 방법 (0) | 2022.07.31 |
[Vue.js] v-html을 사용하지 마세요. (0) | 2022.05.27 |
[Vuejs] 엔터로 서브밋 보내기 (0) | 2022.05.11 |
[Vue.js2 + tailwindcss] build 설정 방법 (0) | 2022.02.10 |
댓글