버튼에 따른 콘텐츠 변경
첫번째 버튼. 버튼에 따라 siteReferrer에 Technology,CONTACT,DESIGN,AI 상태로 변경되면서 콘텐츠도 변경
두번째 버튼. 현재 콘텐츠에서 refresh 버튼을 누르면 다음 인덱스에 있는 콘텐츠로 변경
AppRouter -> MainContainer(메인페이지 통합 컴포넌트) -> VisionMainSection(메인비쥬얼 컴포넌트)
첫번째 버튼
const CHALIXCONTENS = [
{
id: 1,
tit: "TECHNOLOGY",
vid1: "back2.mp4",
vid2: "2.mp4",
text: "압도적인 기술력으로 경쟁사와 격차를 벌리는 홈페이지",
},
{
id: 2,
tit: "CONTACT",
vid1: "contact01.mp4",
vid2: "contact0222.mp4",
text: "당신의 브랜드를 고객에게 강력히 각인시킬 홈페이지",
},
{
id: 3,
tit: "DESIGN",
vid1: "design.mp4",
vid2: "design222.mp4",
text: "당신의 비즈니스에 강력한 차별화가 될 홈페이지",
},
{
id: 4,
tit: "A.I & GPT",
vid1: "ai.mp4",
vid2: "ai22.mp4",
text: "시장 판도를 뒤흔드는 A.I기술을 당신의 홈페이지에 적용하세요",
},
];
const [chalixContents, setChalixContents] = useState({
id: 1,
tit: "Technology",
vid1: "back2.mp4",
vid2: "2.mp4",
text: "압도적인 기술력으로 경쟁사와 격차를 벌리는 홈페이지",
});
onClick={() => {
changeRe("AI");
changeContents();
}}
const changeContents = () => {
setVisionActive(false);
if (siteReferrer === "Technology") {
setChalixContents(CHALIXCONTENS[0]);
} else if (siteReferrer === "CONTACT") {
setChalixContents(CHALIXCONTENS[1]);
} else if (siteReferrer === "DESIGN") {
setChalixContents(CHALIXCONTENS[2]);
} else if (siteReferrer === "AI") {
setChalixContents(CHALIXCONTENS[3]);
} else {
setChalixContents(CHALIXCONTENS[0]);
}
setTimeout(() => {
setVisionActive(true);
}, 500);
};
useEffect(() => {
changeContents();
}, [siteReferrer]);
두번째 버튼
<button
className="vision-main-middle-btn"
type={"button"}
onClick={() => {
changeContentsBtn();
}}
>
CHALIXCONTENS[nextIndex]
넣어서 다음 콘텐츠로 상태가 변경된다.const changeContentsBtn = () => {
setVisionActive(false);
const currentIndex = CHALIXCONTENS.findIndex(
(content) => content.id === chalixContents.id
);
const nextIndex = (currentIndex + 1) % CHALIXCONTENS.length;
setChalixContents(CHALIXCONTENS[nextIndex]);
setTimeout(() => {
setVisionActive(true);
}, 500);
};
첫번째 버튼 개발할 때 useEffect에 조건을 chalixContents로 줬었다.
그래서 버튼을 누를 때 처음엔 siteReferrer값만 변경되고 콘텐츠가 변경되지 않았다.
다른분께 헬프쳐서 조건을 siteReferrer가 변경될때 리랜더링 되도록해서 문제가 해결됐다.
const [hoveredBtnIndex, setHoveredBtnIndex] = useState(null);
const handleHoverMouseEnter = (index) => {
setHoveredBtnIndex(index);
};
const handleHoverMouseLeave = () => {
setHoveredBtnIndex(null);
};
<button
className={`vision-main-middle-hover-text-item ${
hoveredBtnIndex === 0 ? "active" : ""
}`}
type={"button"}
onClick={() => {
changeRe("Technology");
changeContents();
}}
onMouseEnter={() => handleHoverMouseEnter(0)}
onMouseLeave={handleHoverMouseLeave}
>
<p className="vision-main-middle-hover-text-item-text">
TECHNOLOGY
</p>
</button>