ㅂ
저 이미지 슬라이드 작동하는 부분만 코드 가져옴.
으악 이거 왜이러는거임
const [step, setStep] = useState<number>(1);
const [puase1, setpuase1] = useState<boolean>(true);
const autoplus = () => { //자동으로 step[사진번호]를 늘려서 다음 사진으로 넘겨줌
if (puase1 === false) {
setStep(step + 1);
if (step === 6) {
setStep(1);
}
}
console.log(step);
console.log(puase1);
};
let autoSlide = setInterval(autoplus, 1000); //1초에 자동슬라이드 1번씩 실행함
const playStop = () => { // playStop버튼 누르면 실행되는 함수
setpuase1(!puase1);
if (puase1 === true) { // puase1을 토글 해주고 true가 오면 인터벌 해제시킴
clearInterval(autoSlide);
}
if (puase1 === false) { // playstop 버튼을 한번 더 누르면 puase1가 토글되고 자동 넘기기 다시 실행
autoSlide;
}
};
return (
<div className="sliderContainder">
{autoSlide}
{/* {getId(arr1)} */}
<button className="leftarrow" onClick={handLeftArrow}>
ddd
</button>
<button className="rightarrow" onClick={handRightArrow}>
ddd
</button>
<div className="imagebox">
{step === 1 && <img src={img1} id="appleshow" alt="img1" />}
{step === 2 && <img src={img2} id="appleshow" alt="img2" />}
{step === 3 && <img src={img3} id="appleshow" alt="img3" />}
{step === 4 && <img src={img4} id="appleshow" alt="img4" />}
{step === 5 && <img src={img5} id="appleshow" alt="img5" />}
{step === 6 && <img src={img6} id="appleshow" alt="img6" />}
</div>
<button className="playStop" onClick={playStop}>
play&Stop
</button>
</div>
);
이건 autoplus에서
console.log(step);
console.log(puase1);
찍은사진임. 지멋대로 puase1이라고 멈춤 토글 변수도 막변하고있음
온클릭이벤트 받을때만 puase1이 바껴야되는대 지 멋대로 바뀜 ㅠㅠ
어질어질하네요 - dc App
총체족 난국이긴한데 일단 인터벌 등록을 useEffect에서 해야함 - dc App
마음 가라앉히고 이것저것 검색해보다가 저도 useeffect 개념 보고있어요
코드가 이러면 setXXX를 콜하거나 Props가 달라질때 그냥 저 코드 전체가 새로 한번 실행되는데 그때마다 인터벌이 새로 등록되고 클리어는 안됨 - dc App
솔직히 고칠게 한두곳이 아니라 댓글로 설명이 안될듯
autoSlide를 지역변수가 아니라 useRef 같은곳에 저장하고 그걸 통해서 effect 종료 콜백에서 인터벌을 지워야하는데 일반 변수로 쓰고있고 이 값을 왜 렌더링 하고있는지도 모르겠고 오타 들여쓰기 boolean이랑 비교연산 돌리기 이런것도 고쳐야하고
리액트 다시 배워야 될 듯 농담이 아니라
조언 감사합니다 저도 뭔가 잘못되니까 이런 문제가 발생하는건 알고있어서 개념부터 찬찬히 보고있어요 맞는말씀입니다
리액트로 최신 패러다임이랑 예전 패러다임이랑 많이 다르니 최신 정보 위주로 잘 찾아서 공부해보세요
리액트도
내 생각엔 리액트도 박살 나있긴한데 일단 js ts부터 먼저 익숙해지는게 우선같음
이건 리액트 좀 쳐도 state랑 interval을 effect에서 참조가 변경되지 않는 선에서 잘 비벼야하는거라 생각보다 실수할 곳이 많은데 일단 기본적인 부분에서 너무 틀려있어서 어딜 지적해야할지 모르겠음
말씀들어보니까 usestate 랑 렌더링 순서에 관한 이해가 부족한거같은대 맞나요?
이거 autoslide가 useState를 사용하면서 재랜더링되고 재렌더링 되는순간 다시 return ( 이하의 값들을 재실행 시켜서 무한 루프 되는거맞나요?
렌더링이 재실행될때 return 아래만 재시작하는게 아니라 위에 인터벌 등록까지 전체가 다시 실행됨 - dc App
슬라이더가 지멋대로 튀는것도 1초짜리 인터벌이 여러번 등록되니까 막도는거 - dc App
네 말씀듣고 리액트 lifecycle이랑 클래스,함수형 컴포넌트 차이점이랑 usestate왜쓰는지 알아보고았어요
이제야 문제가 인식은 되네요 근대 이거 또 혼자 고치려면 밤새야될듯
라이브러리 쓰십쇼
시발 사람이 궁해서 존나 찾아보니까 답이 다 나옴
이런게 리액트면 그냥 리액트는 안해야 겠다.
글쓴사람인대 useEffect로 밖으로빼둔 state를 받는 함수를 받아서 해결함
근대 저 구조 자체가 잘못됫다는 말들이 맞더라 이게 랜더링 업데이트까지 고려하니까 저런 구조가 나올수가없음