카테고리 없음
useEffect 내부 반복문 에러
lap_mu
2023. 9. 18. 14:03
문제
- 배열을 나누기 위해 코드를 구현하던 중에 로컬 브라우저에서 아래와 같은 현상이 발생하였다.


문제 원인
- 한가지 한가지씩 주석을 처리하며 확인하던 중 useEffect 안의 for문이 에러의 원인이었다.
(당시 코드)
useEffect(() => {
// 페이지 보다 수가 작은 4개 요소를 담는 배열
const pre = [];
for (let i = page - 4; i < page; i + 1) {
if (i < 0) {
pre.push(data[data.length + i]);
} else {
pre.push(data[i]);
}
}
setPrevDatas(pre);
// 현재 페이지
setSelectDatas(data[page]);
// 페이지 보다 수가 큰 4개 요소를 담는 배열
const next = [];
for (let i = page + 1; i <= page + 4; i + 1) {
if (data.length < i) {
next.push(data[i - data.length]);
} else {
next.push(data[i]);
}
}
setNextDatas(next);
}, [data, page]);
문제 해결
- for문을 사용하지 않고 구현할 수 있는 방법이 있을까 생각하던 도중 페이지를 기준으로 작은 페이지와 큰 페이지를 잘라내면 되므로 조건문과 slice()를 사용하기로 했다.
useEffect(() => {
const pre = data.slice(page - 4);
if (pre.length < 4) {
pre.push(...data.slice(0, 4 - pre.length));
}
setPrevDatas(pre);
setSelectDatas(data[page]);
const next = data.slice(page + 1, page + 5);
if (next.length < 4) {
next.push(...data.slice(0, 4 - next.length));
}
setNextDatas(next);
}, [data, page]);
결과적으로 성공했다! 데이터가 원하는 형태로 잘 나왔다!
