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
- Database
- bootstrap
- til
- db
- CSS
- JavaScript
- Protocol
- W
- SQL
- useEffect
- TMDB
- API
- HTML
- github
- url
- firestoredatabase
- supabase
- Cloud
- this
- Boostrap
- web
- nosql
- IntersectionObserver
- Github Pages
- REACT
- 배포
- http
- Fetch
- data
- jQuery
Archives
- Today
- Total
072DATA
이벤트 버블링? `stopPropagation`메소드로 해결 본문
오류 내용
부모 div의 onClick 이벤트에 상세페이지로 이동할 수 있도록 기능을 부여헀는데
해당 div안에 다른 기능을 하고 있는 버튼을 눌렀을 때도 상세페이지로 이동하는 버그가 생겨버렸다
아무래도 부모 요소의 onClick이 자식 요소에게 까지 전파가 되어 버려서
일어난 버그인 것으로 유추가 되지만 좀 더 자세히 알아볼 수 있도록 정보를 캐왔다
오류 원인
HTML 문서에서 요소들은 "중첩 관계"라는 것을 가질 수 있다고 하는데
어떠한 요소가 또 다른 요소안에 존재할 수 있고 해당 요소의 클릭 이벤트는
부모-> 자식 혹은 자식-> 부모로 계속 전파된다고 함 이를 "이벤트 버블링"이라 함
해결 방법
그리하여 stopPropagation이라는 메소드를 사용해서
현재 요소에 등록된 이벤트 리스너만 실행되고 상위 요소로 전파되는 것을 막아버리면 되는 것임
코드를 한 번 살펴보면
const PokemonCard = ({pokemon, index, isSelected, onAddPokemon, onDeletePokemon, onDetailClick}) => {
return (
<PokemonContainer onClick={onDetailClick}>
<img src={pokemon.img_url} alt="" />
<div>
<PokemonName>{pokemon.korean_name}</PokemonName>
<PokemonNumber>No. {index + 1}</PokemonNumber>
</div>
{isSelected ? (
<RedButton
text="삭제"
onClick={(e) => {
e.stopPropagation();
onDeletePokemon();
}}
/>
) : (
<RedButton
text="추가"
onClick={(e) => {
e.stopPropagation();
onAddPokemon(pokemon);
}}
/>
)}
</PokemonContainer>
);
};
PokemonContainer에 있는 onClick 요소가 자식 요소인 RedButton까지 영향을 주어서
버튼을 눌렀을 때 마저 상세페이지로 이동한다는 것임 ->
그리하여 해당 버튼에 stopPropagation 메소드를 넣어주고 문제를 해결하였음 끝
'Anything > 오류 해결(error)' 카테고리의 다른 글
`오류 해결` 데이터 값 불러올 때 속성 값 = null (1) | 2024.09.02 |
---|---|
`오류 해결` Cannot read properties of null (호이스팅, useEffect) (0) | 2024.08.30 |
`React` 타입 오류 해결 (0) | 2024.08.25 |
`React` map 메소드 내에서 jsx 반환 오류.. (0) | 2024.08.24 |
이중 반복문의 무서움(중첩 for, forEach) - 에러 해결 (0) | 2024.08.05 |