✍️ 기록/React
[React Swiper.js] 설치 및 사용법 알아보기
김물사
2025. 3. 19. 17:09
📌 Swiper.js
- 캐러셀 UI를 만들기 위해 사용되는 인기 있는 라이브러리
- 이미지 슬라이드 또는 콘텐츠 이동을 구현할 때 사용
- 웹과 앱에서 터치 및 반응형 최적화
- 간단한 사용법, 다양한 옵션 제공, 다양한 환경에서 커스터마이징 가능
📍 기존 React 프로젝트에 Swiper 설치
npm install swiper
// 📍 SwiperTest.tsx
// Import Swiper React components
import { Swiper, SwiperClass, SwiperSlide } from 'swiper/react';
// Import Swiper styles
import 'swiper/css';
export const SwiperTest = () => {
return(
<Swiper
spaceBetween={10}
slidesPerView={3}
onSlideChange={() => console.log('slide change')}
onSwiper={(swiper:SwiperClass) => console.log('onSwiper', swiper)}
>
<SwiperSlide><div className="box">1</div></SwiperSlide>
<SwiperSlide><div className="box">2</div></SwiperSlide>
<SwiperSlide><div className="box">3</div></SwiperSlide>
<SwiperSlide><div className="box">4</div></SwiperSlide>
<SwiperSlide><div className="box">5</div></SwiperSlide>
</Swiper>
)
}
// 📍SwiperTest 컴포넌트 사용
<div>
<SwiperTest />
</div>
✅ Swiper 사용 끝!
- 3개씩 보여주기
- 슬라이드 간격 10
📍 Swiper TypeScript - SwiperClass, SwiperProps
📗SwiperClass
- SwiperClass는 Swiper.js에서 제공하는 React 환경에서의 Swiper 인스턴스 타입
- React Swiper에서 반환되는 인스턴스 타입
// React Swiper에서 제공하는 타입을 import하는 방식
import { SwiperClass } from 'swiper/react'
// 👆 or 👇
// Swiper의 core class를 직접 import하는 방식
import { Swiper as SwiperClass } from 'swiper'
const handleOnSwiper = (swiper: SwiperClass) => {
console.log(swiper)
}
<Swiper onSwiper={handleOnSwiper}> ... </Swiper>
📗SwiperProps
- Swiper 컴포넌트에 전달되는 속성들을 정의한 타입
import { SwiperProps } from 'swiper/react';
const CAROUSEL_DEFAULT_OPTIONS: SwiperProps = {
spaceBetween: 10,
slidesPerView: 3,
};
<Swiper {...CAROUSEL_DEFAULT_OPTIONS}>
...
</Swiper>
📍 Swiper 컴포넌트 - props : option, children 활용
- 부모 컴포넌트에서 list.map slide-item을 만들어서 children으로 보내고 싶을 때
- children 받아와서 map을 사용하여 각각 SwiperSlide로 슬라이드 생성
- 부모에게 전달 받은 옵션을 swiper 에 적용과 디폴트 옵션 설정
// 📍SwiperTest.tsx
import React from 'react';
import { Swiper, SwiperSlide, SwiperProps } from 'swiper/react';
import 'swiper/css';
interface SwiperTestPropsType {
children: React.ReactNode;
swiperClassName?: string;
swiperOptions?: SwiperProps;
}
const CAROUSEL_DEFAULT_OPTIONS: SwiperProps = {
spaceBetween: 10,
slidesPerView: 3,
};
export const SwiperTest = ({
children,
swiperClassName = 'carousel-wrap',
swiperOptions = CAROUSEL_DEFAULT_OPTIONS,
}:SwiperTestPropsType) => {
return(
<Swiper
{...swiperOptions}
className={swiperClassName}
>
{
React.Children.toArray(children).map((childEl, index) => (
<SwiperSlide key={index} className="carousel-item">
{childEl}
</SwiperSlide>
))
}
</Swiper>
);
};
// 📍 Parent.tsx
const testData = ['slide-1','slide-2','slide-3','slide-4','slide-5','slide-6'];
<SwiperTest>
{
testData.map((item,idx) => (
<div className="box" key={idx}>
{item}
</div>
))
}
</SwiperTest>
✍️ 기록
감사합니다. 😁
반응형