<Swiper
slidesPerView={
window.innerWidth <= 550
? 1
: window.innerWidth <= 720
? 2
: window.innerWidth > 720
? 3
: 0
}
spaceBetween={30}
pagination={{
clickable: true,
}}
modules={[Pagination]}
className="mySwiper"
>
{cardApi.map((card) => (
<SwiperSlide>
<div key={card.name} className="testimonial__card">
<div className="testimonial__card-top">
<img src={card.profilePic} alt={card.name} />
<div>
<h4>{card.name}</h4>
<p>{card.position}</p>
</div>
</div>
<div className="testimonial__card-bottom">
<p>{card.comment}</p>
</div>
</div>
</SwiperSlide>
))}
</Swiper>
In the lines of code above, I'm trying to conditionally set the slides of a swiper based on the screen size (in order to make it responsive). The goal is to make 3 slides display on a (1280px) screen, 2 slides on a (720px) screen and lower, and a single slide on a (550px) screen and lower.
The code shared above does work eventually, but that is only after I refresh the page. I am hoping there'll be a better way to approach this issue where the slides will automatically adjust to the conditions immediately after resizing the screen without having to refresh the page again.
Based on what others have recommended, you need to setup an
eventListenerthat listens for theresizeevent . This can be done inside auseEffect. On resize, it will then set the slides per view.The function that sets the slidesPerView:
The useEffect :
Here is an example on codesandbox : https://codesandbox.io/s/interesting-currying-uoxpw1?file=/src/App.js:538-772