반응형
무한 스크롤
웹 어플리케이션에서 페이지 스크롤이 아래로 내려가면서 자동으로 추가 콘텐츠를 로드하는 무한 스크롤은 사용자 경험을 향상시킵니다. 바닐라 JS로 구현도 가능하지만 간단하게 구현하기 위해 Vue.js에서 제공하는 플러그인을 사용하여 구현해보겠습니다. vue-infinite-scroll과 vue-infinite-loading이 있지만 vue-infinite-loading vue 컴포넌트 라이브러리를 사용한 예시를 보여드리겠습니다.
vue-infinite-loading
Vue.js 애플리케이션에 무한 스크롤 기능을 추가하는데 도움을주는 Vue 컴포넌트 라이브러리입니다. 이 라이브러리를 통해 무한 스크롤을 간단하게 구현할 수 있습니다. 다음 링크에 나와있는 예제 코드를 참고하여 작성했습니다.
https://jsfiddle.net/rLw27aby/2/
vue-infinite-loading 설치:
npm install vue-infinite-loading
코드 작성:
axios를 이용하여 GET 요청을 보내기 때문에 요청을 받는 서버 쪽에 page와 perPage를 파라미터로 받는 코드를 작성해주어야 합니다. (MySQL의 경우 limit/offset)
<template>
<div>
<h3 class="user-list-title">사용자 리스트</h3>
<div class="table-container">
<table class="user-table">
<thead>
<tr>
<th>ID</th>
<th>이름</th>
<th>소속</th>
<th>전화번호</th>
</tr>
</thead>
<tbody>
<tr v-for="user in users" :key="user.userId">
<td>{{ user.userId }}</td>
<td>{{ user.userName }}</td>
<td>{{ user.userOrganization }}</td>
<td>{{ user.cellphone }}</td>
</tr>
</tbody>
</table>
<infinite-loading @infinite="infiniteHandler"></infinite-loading>
</div>
</div>
</template>
<script>
import Constants from '@/constants.js';
import InfiniteLoading from 'vue-infinite-loading';
export default {
components: {
InfiniteLoading,
},
data() {
return {
page: 1,
users: [],
}
},
methods: {
infiniteHandler($state) {
this.$axios.get(Constants.URL.GET_USERS, {
params: {
page: this.page,
perPage: 10 // 가져올 개수
},
}). then((response) => {
const data = response.data;
if (data.length) {
this.page++;
this.users.push(...data);
$state.loaded();
} else {
$state.complete();
}
});
},
},
}
</script>
반응형
'Front-End > Vue.js' 카테고리의 다른 글
Vue.js mixin 사용 방법: 코드 재사용 및 컴포넌트 공유 (0) | 2023.10.16 |
---|---|
Vue.js this.$set 반응성 유지를 위한 방법 (0) | 2023.07.25 |
Vue.js Vuex store: Vue.js 어플리케이션의 상태 관리를 해결하는 방법 (0) | 2023.07.25 |
Vue.js Vue에서 배열(Array) 변경 감지하기 (0) | 2023.07.13 |
Vue.js ref 속성으로 요소와 컴포넌트에 쉽게 접근하기 (0) | 2023.07.12 |