ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JS] 페이징 - 더보기 버튼
    조각조각/JavaScript 2024. 4. 8. 21:22
    프론트엔드 웹 개발의 모든 것 초격차 패키지 Online. 강좌를 보며 새롭게 알게 된 사실들을 기록합니다.🙌

     

     

    더 보기 버튼은 기존 페이지에 새로운 페이지를 '추가'하는 방식이다.

    실습을 위해 사용한 API는 데이터 요청 시 한 번에 10개씩 반환해 준다. 이때 API에서 page라는 key값을 제공해 주기 때문에 이를 활용하여 더 보기 버튼 기능 구현이 가능하다. 

     

    더 보기 버튼 클릭 시 서버에 키워드를 요청하는 통신 로직을 가지고 있는 searchMovies 함수에 동적으로 원하는 page의 value값을 전달해줘야 한다.

     this.el.addEventListener("click", async () => {
        // 버튼 클릭시 API 통신하는 store 함수 활용
        await searchMovies(movieStore.state.page + 1);
      });

     

    searchMovies 함수에서 받아온 매개변수 값을 요청 쿼리에 넣어주고, 응답받은 값의 속성 중 하나인 totalResults의 값을 통해 영화 목록 리스트의 페이지 개수를 알아낼 수 있다. totalResults 속성은 키워드와 일치하는 결과의 총개수인데, 한 번에 10페이지씩 값이 반환되니 총개수를 10으로 나누고 올림처리를 해주면 된다. 이때 반환값이 string이므로 number로 꼭 바꿔주자!

     store.state.pageMax = Math.ceil(Number(totalResults) / 10);

     

    그리고 받아올 수 있는 페이지 개수를 담은 pageMax값과 현재 보이고 있는 페이지 수를 담은 page를 비교하여 더 이상 보여줄 페이지가 없다면 더 보기 버튼을 숨김처리 하도록 CSS를 제어해 준다.

    export default class MovieLIstMore extends Component {
      constructor() {
        super({
          tagName: "button",
        });
        movieStore.subscribe("pageMax", () => {
          const { page, pageMax } = movieStore.state;
          pageMax > page
            ? this.el.classList.remove("hide")
            : this.el.classList.add("hide");
        });
      }
      render() {
    	  // ...
    	}
    }
    .view-more {
      width: 100%;
      max-width: 300px;
      margin: 20px auto;
      display: block;
    }
    
    .view-more.hide {
      display: none;
    }

     


    참고

    [패스트캠퍼스 인강] 프론트엔드 웹 개발의 모든 것 초격차 패키지 Online - API를 활용한 영화 검색 사이트(링크)

     

    💬 본 포스팅은 공부 기록용으로 정확하지 않은 정보가 존재할 수 있습니다. 발견하신다면 알려주세요!

Designed by Tistory.