usePagination - composition api (vue2)

2022-08-19

이슈 1. 반복 코드 리팩토링

Pagination 컴포넌트를 사용하는 곳에서 공통으로 반복해서 사용하는 코드를 composition api 를 사용하여 개선해보았습니다.

기존 공통 코드

export default Vue.extend({
  data: () => ({
    pageOptions: {
      page: 1,
      size: 10,
      totalElements: 0,
      totalPages: 0,
      first: false,
      last: false,
    },
  }),
  ...
  methods: {
    async getNotice() {
      try {
        const response = await notice_api.getNotice(config);
        if (response.status === 200) {
          const data = response.data.items;
          this.pageOptions = {
            page: this.pageOptions.page,
            size: data.size,
            totalElements: data.totalElements,
            totalPages: data.totalPages,
            first: data.first,
            last: data.last,
          };

개선 코드

hooks/usePagination.ts

공통으로 사용할 data와 function을 관리

사용 예

한번에 보여줄 리스트 갯수(size) 조절시 예

이슈 2. typescript: property does not exist on type 'object & record<never, any>

  • setup() 에서 return한 데이터를 <template> 코드 내에서 사용시 기능은 모두 동작하였으나, 위와 같은 빨간줄 typescript 경고가 생겼습니다.

  • 테스트해보니 chrome vue extention 에서도 data로 잘 들어오고 있고, build 에러도 뜨지 않았지만, 찾아보니 아래와 같이 수정을 하면 typescript 경고가 발생하지 않았습니다.

참고 자료

해결 코드

Pagination 2개 이상 사용시 코드 비교

composition api 사용 전

composition api 사용 후

이렇게 코드의 재사용성을 높여 반복 코드를 줄일 수 있습니다.

Last updated

Was this helpful?