개발조각

[Swiper & React] Swiper로 화면 밖에 pagination 만드는 방법 본문

라이브러리

[Swiper & React] Swiper로 화면 밖에 pagination 만드는 방법

개발조각 2023. 9. 10. 22:03
728x90
반응형

만들고 싶은 슬라이드


문제점


React로 위와 같은 슬라이드를 만들려면 

<Swiper></Swiper> 안에 아래와 같이 적용을 해야 되는데

<Swiper pagination={true} modules={[Pagination]} className="mySwiper">
    <SwiperSlide>Slide 1</SwiperSlide>
    <SwiperSlide>Slide 2</SwiperSlide>
    <SwiperSlide>Slide 3</SwiperSlide>
    <SwiperSlide>Slide 4</SwiperSlide>
    <SwiperSlide>Slide 5</SwiperSlide>
    <SwiperSlide>Slide 6</SwiperSlide>
    <SwiperSlide>Slide 7</SwiperSlide>
    <SwiperSlide>Slide 8</SwiperSlide>
    <SwiperSlide>Slide 9</SwiperSlide>
  </Swiper>

이렇게 할 경우 Swiper가 hidden처리가 되어 있어 pagination을 따로 만들고 커스텀해주어야 된다.

 

해결방법


https://codesandbox.io/s/m54gfx?file=/src/App.jsx 

 

swiper-react-pagination-custom - CodeSandbox

swiper-react-pagination-custom using react, react-dom, swiper

codesandbox.io

swiper demo예제 중에서 pagination을 커스텀하는 방법이 나와있고,

이를 참고해서 만들면 됩니다.

 

import React, { useRef, useState } from 'react';
// Import Swiper React components
import { Swiper, SwiperSlide } from 'swiper/react';

// Import Swiper styles
import 'swiper/css';
import 'swiper/css/pagination';

import './styles.css';

// import required modules
import { Pagination } from 'swiper/modules';

export default function App() {
  const paginationRef = useRef(null);

  const pagination = {
    el: paginationRef.current,
    clickable: true,
    renderBullet: function (index, className) {
      return '<span class="' + className + '">' + (index + 1) + '</span>';
    },
  };

  return (
    <>
      <div>
          <Swiper
            pagination={pagination}
            modules={[Pagination]}
            className="mySwiper"
          >
            <SwiperSlide>Slide 1</SwiperSlide>
            <SwiperSlide>Slide 2</SwiperSlide>
            <SwiperSlide>Slide 3</SwiperSlide>
            <SwiperSlide>Slide 4</SwiperSlide>
            <SwiperSlide>Slide 5</SwiperSlide>
            <SwiperSlide>Slide 6</SwiperSlide>
            <SwiperSlide>Slide 7</SwiperSlide>
            <SwiperSlide>Slide 8</SwiperSlide>
            <SwiperSlide>Slide 9</SwiperSlide>
          </Swiper>
      </div>
      <div className="swiper-custom-pagination" ref={paginationRef}></div>
    </>
  );
}

 

위예제에서 추가한 점은

1. Ref 추가하기

const paginationRef = useRef(null);

 

2. Ref 적용하기

<div className="swiper-custom-pagination" ref={paginationRef}></div>

 

3. pagination옵션 el에 Ref.current 넣기

  const pagination = {
    el: paginationRef.current,
    clickable: true,
    renderBullet: function (index, className) {
      return '<span class="' + className + '">' + (index + 1) + '</span>';
    },
  };

이 3가지만 적용하시면 pagination을 커스텀할 수 있습니다.

 

여기서 주의해야 될 점은 renderBullet에서 <span class=>에서 class를 className으로 쓰시면 오류가 납니다.

꼭 예제에 있는 그대로를 사용하시길 바랍니다.

728x90
반응형
Comments