Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Fetch
- data
- Github Pages
- SQL
- this
- Boostrap
- bootstrap
- IntersectionObserver
- nosql
- http
- CSS
- db
- Cloud
- Database
- REACT
- Protocol
- web
- W
- firestoredatabase
- 배포
- til
- TMDB
- supabase
- API
- useEffect
- JavaScript
- github
- jQuery
- url
- HTML
Archives
- Today
- Total
072DATA
이중 반복문의 무서움(중첩 for, forEach) - 에러 해결 본문
안녕
안녕하세요 오늘은 프로젝트 진행 중 오류가 발생했던 건을 기록해 보려고 합니다!
일단 각 영화 카드를 선택하면 해당하는 카드의 id 값으로 상세페이지가 불러와져야 합니다.
하지만 이중 중첩 forEach문을 잘못 사용하게 되어 같은 id값의 상세페이지가 로드 되었습니다.
틀린 예시 X
올바른 예시 O
이렇게 각 카드에 해당하는 id 값을 적용시켜야 하는데
1번 id 값을 모든 카드에 다 넣어주고 2번 id 값을 모든 카드에 다 넣어주었기 때문에
결국 마지막 id 값을 모든 카드가 가지게 되어 같은 상세페이지가 나오는 것 입니다.
기존 코드
data.results.forEach(movie => {
document.querySelectorAll(".movie-card").forEach(card => {
card.addEventListener("click", (e) => {
if (!e.target.classList.contains("movie-like")) {
(window.location.href = `./view/detail.html?id=${movie.id}`)
const recentMovies = JSON.parse(localStorage.getItem('recentMovies')) || [];
recentMovies.push(movie);
localStorage.setItem('recentMovies', JSON.stringify(recentMovies));
}
});
})
})
보시면 이중 ForEach문으로 뿌려줄 곳을 선택하고 그곳에 같은 값의 movie.id를 넣어주고 있습니다
결국 반복문이 끝까지 진행된다면 마지막 영화 id 값이 모든 카드에 들어가게 되겠죠
수정 코드
const movieCard = document.querySelectorAll(".movie-card")
data.results.forEach((movie, i) => {
const card = movieCard[i]
card.addEventListener("click", (e) => {
if (!e.target.classList.contains("movie-like")) {
(window.location.href = `./view/detail.html?id=${movie.id}`)
const recentMovies = JSON.parse(localStorage.getItem('recentMovies')) || [];
recentMovies.push(movie);
localStorage.setItem('recentMovies', JSON.stringify(recentMovies));
}
});
})
그리하여 id 값을 넣어줄 카드를 먼저 선택하고 반복문을 돌리는데
forEach문의 두번 째 매개변수는 index번호이기 때문에
그것을 활용하여 card 변수안에 선택했던 movie-card 클래스를 가진 요소를 순서대로 넣어주면서
해당되는 id 값을 넣어주는 것 입니다. 이렇게하여 오류를 해결하였고 코드의 가독성도 좋아졌습니다.
마무리
프로젝트를 진행하면서 여러가지 오류 사항들을 겪고 있는데 그 중 하나를 해결하면서
다음에 이런 오류가 또 발생할 수도 있기 때문에 무조건 기록해야겠다는 생각을 했습니다.
앞으로 이틀 남았는데 화이팅 해보자!! 끝
'Anything > 오류 해결(error)' 카테고리의 다른 글
`오류 해결` 데이터 값 불러올 때 속성 값 = null (1) | 2024.09.02 |
---|---|
`오류 해결` Cannot read properties of null (호이스팅, useEffect) (0) | 2024.08.30 |
이벤트 버블링? `stopPropagation`메소드로 해결 (0) | 2024.08.26 |
`React` 타입 오류 해결 (0) | 2024.08.25 |
`React` map 메소드 내에서 jsx 반환 오류.. (0) | 2024.08.24 |