금융프로젝트
[react][슬라이드] 3초마다 화면이 변경되는 슬라이드 구현
h-yujin
2022. 10. 27. 16:08
만들고 싶었던 화면
몇초인지는 모르겠으나 시간마다 화면이 자동으로 바뀌면서 금융상품을 보여주는 화면을 만들고자 한다.
내가 만든 화면
3초마다 화면을 바뀌게 했지만 버벅거리는 게 있다.
DB
db에 있는 데이터
데이터 받아오기
const [goods, setGoods] = useState([{"gName":"","gInterest":"","gPeriod":"","gMPay":"","gAge":"","gType":""}]);
useEffect ( () => {
fetch("<http://localhost:9090/bank/goods>").then(res => res.json()).then(res => {
setLoading(true);
setGoods(res);
}
);
}, []);
fetch로 서버로 부터 데이터를 받아와서 상태변수에 넣어준다.
태그
const GoodsBlockStyle = styled.div`
position: absolute;
width: 30vw;
height: 15vh;
left: 35vw;
top: 15vh;
padding: 2vw;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 1.5rem;
background: #FFD74B;
border-radius: 2rem;
`;
const GoodsTableStyle = styled.table`
position: absolute;
width: 30vw;
height: 40vh;
left: 35vw;
top: 40vh;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 1.5rem;
`;
const LogoStyle = styled.div`
width: 2vw;
height: 2vw;
text-align: center;
border-radius: 50%;
background: #FFD74B;
`;
return (
<div>
<GoodsBlockStyle>
나에게 딱 맞는<br></br>
금융상품을 찾아보세요
</GoodsBlockStyle>
<GoodsTableStyle>
<Film slide={slidePx} goods={ goods[index] }></Film>
</GoodsTableStyle>
</div>
);
원래는 slidePx로 태그를 이동시킬려고 했으나 그냥 데이터를 바꿔서 화면을 변경시키는 것을 했다.
const [index, setIndex] = useState(0);
setInterval(() => {
if (loading) {
if (index == goods.length - 1) {
setIndex(0);
} else {
setIndex(index + 1);
}
}
}, 3000);
3초마다 인덱스를 증가시켜 태그에 바인딩되는 데이터를 변경해 준다.
jsx 삼항연산자 사용하기
const Film = ({ goods, slide } ) => {
return (
<tbody
className="film"
style={{
transform: `translateX(${slide}vw)`,
transition: "0.5s ease",
}}
>
<tr>
<td><img src={process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>{ goods.gName}({goods.gType})</td>
</tr>
<tr><td><hr></hr></td><td><hr></hr></td></tr>
{
goods.gInterest != 0 ?
<tr>
<td><img src={ process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>연 { goods.gInterest}%</td>
</tr>
:null
}
{
goods.gPeriod != 0 ?
<tr>
<td><img src={ process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>최대 { goods.gPeriod}년</td>
</tr>
:null
}
{
goods.gMPay != 0 ?
<tr>
<td><img src={ process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>월 { goods.gMPay}납입</td>
</tr>
:null
}
{
goods.gAge != 0 ?
<tr>
<td><img src={ process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>만 { goods.gAge}세부터 수령</td>
</tr>
:null
}
{
goods.gMaturity != 0 ?
<tr>
<td><img src={ process.env.PUBLIC_URL+"/savings.png"}></img></td>
<td>만기 { goods.gMaturity}개월</td>
</tr>
:null
}
<tr><td><br></br><br></br></td></tr>
</tbody>)
}
<tbody>
{
goods.gInterest != 0? [태그]:null
}
</tbody>
위의 방식으로 데이터가 0일 경우 태그를 생성하지 않았다.