๋งจ๋ ์ ํด์ ธ์๋ ํ ํ๋ฆฟ์ ์ด์ฉํ ๊ธฐ๋ฅ ๊ฐ๋ฐ๋งํ๋ค๊ฐ ๋ชจ์ฒ๋ผ ์๋ก์ด UI๋ฅผ ์ง์ผํ๋ ์ผ์ด ์๊ฒผ๋ค.
๋ฐ๋ฐฅ์ ๊น์๋ณด์๋ฉด ใ ใ ... ์ฒ์๋ถํฐ ๋น๋ํ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ค๊ฐ์ ๋ผ์ฌ๋ ํ๋ก์ ํธ์๊ธฐ์ ์ฝ๋๋ฅผ ์ฝ์ ๋๋ถํฐ ๋ฒ๋ฒ ์ด๊ธด ํ๋ค.
์ ์ด์ ๋ฐ๋ฐฅ์ ๊น๋ฆผ.
๋ด๊ฐ ํด์ผํ ๋ชฉ๋ก
1. swiper ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด๋ค.
2. navigator ๋ฒํผ์ ๋์ค๊ฒํ๊ณ ์ฒซ ์ฌ๋ผ์ด๋์์๋ ์ผ์ชฝ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ฒ ๋ง์ง๋ง ์ฌ๋ผ์ด๋๋ ์ค๋ฅธ์ชฝ ๋ฒํผ์ด ์ฌ๋ผ์ง๊ฒํ๋ค.
3. ์ฌ๋ผ์ด๋๋ ๋ง์ฐ์ค ๋๋๊ทธ๋ก๋ ๊ฐ๋ฅํ๊ฒํ๋ค.
Code
import React, { useState } from 'react';
import { Swiper, SwiperSlide } from 'swiper/react';
const Projects = () => {
const [swipe, setSwipe] = useState<any>();
const [lastBtn, setLastBtn] = useState<boolean>(false);
const [firstBtn, setFirstBtn] = useState<boolean>(true);
return (
<>
<button onClick={() => swipe?.slidePrev()}>backward</button>
<Swiper
onBeforeInit={(swipper) => setSwipe(swipper)}
// ๋ฒํผ display๋ฅผ ์ํ ๋ถ๋ถ
onSlideChange={e => {
e.isEnd ? setLastBtn(true) : setLastBtn(false);
e.isBeginning ? setFirstBtn(true) : setFirstBtn(false);
}}
>
{projects?.map((value: IProjectCard) => {
return (
<SwiperSlide key={uuidv4()}>
<ProjectCard
key={uuidv4()}
header={value.header}
/>
</SwiperSlide>
);
})}
</Swiper>
<button onClick={() => swipe?.slideNext()}>forward</button>
</>
);
};
์์ ์ฝ๋์์๋ ์๋ต๋์๋๋ฐ lastBtn, firstBtn์ ์ด์ฉํด์ button style์ display๋ฅผ ์ฃผ๋ฉด ๋๋ต๋๋ค!
useRef๋ฅผ ์จ์ ํด๊ฒฐํ ์ ์๋ค๊ณ ํ๋๋ฐ, typescript๋ฅผ ์ฐ๋ฉด ํ์ ์ ๋ํ ์๋ฌ๊ฐ ๊ณ์ ๋์ ์ฌ์ฉํ์ง ๋ชป ํจ.
๊ทธ๋์ ์ฐพ์๋ธ๊ฒ useState๋ฅผ ์ฐ๋ ๊ฒ์ด์๋ค, ๊ทธ๋ฐ๋ฐ ์ฌ์ ํ ์ดํด๊ฐ ํ๋ค๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๋ฉด 100% ์ดํด ํ ํ์์์ด ๊ทธ๋ฅ ๋ฐฉ๋ฒ์ ์ธ ๋ถ๋ถ๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ ๊ฑด๊ฐ ์ถ์๋ฐ, ๋ต๋ตํ๋ค. setSwipe๋ฅผ ์ดํดํ๊ณ ์ถ์ด์ ์ฝ๋๋ฅผ ๋ค ๊น๋ณด๊ณ ์ถ์ ๋ง์ ๋ฐ, ๋ณต์กํจ์ ๋ฃ์ด๋๊ณ ์ถ์ ๋ง์ ๋ฐ. ใ ใ ใ ใ ใ ... ใ ... ๊ทธ๋๋ ์๋ํ๋ค๋ ๊ฒ์ ๊ฐ์จ
์ค๋๋ง์ ์๋ก์ด ๊ฒ์ ๋์ ํ๋๊ฑฐ๋ผ์ ์ค์ค๋ก๊ฐ ๋ฐ๋ณด๊ฐ ๋๊ฑด๊ฐ? ํ๋ ์๊ฐ๋ ๋ง์ด ๋ค์๋ค. ์ด๋์ ๋๋๊ฑธ๊ฐ? ๋ผ๋ฉฐ... ใ ...