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
- 객체 리터럴
- Object in Object
- useState
- 객체 속 객체
- rerender
- 함수선언식
- 회고
- 객체
- null 병합 연산자
- mobx react
- 함수호이스팅
- 개발자 회고
- 이직
- react
- 모던자바스크립트
- Object Type
- 지역스코프
- 모던자바스크립트 Deep Dive
- object
- Type {children: Element} has no properties in common with type IntrinsicAttributes
- type script
- 모던 자바스크립트 Deep Dive
- Object.is
- Java Script
- 개발자
- til
- 23년 상반기
- 옵셔널 체이닝 연산자
- 2023 회고
- 전역스코프
Archives
- Today
- Total
Pie_Archive
[React] 부모 요소의 Event 제어하기 본문
0. 개요
프로젝트를 구현하는 과정에서 이러한 List를 만들었다.
각 List는 클릭시 해당 페이지로 이동되고,
여기에 각 List를 제어하기 위한 체크박스도 추가했는데
체크박스 클릭시 체크박스 이벤트와 부모요소인 List의 이동 이벤트가 동시에 작동되었다.
부모 요소의 이벤트는 사용하지 않은 채 자식요소의 이벤트만 사용하고 싶다면 어떻게 해야될까?
1. 삽질기: e.preventDefault()
리액트를 배웠을 때, 다른 이벤트의 동작을 막기 위해 사용했던 e.preventDefault()를 사용했다.
결과는 역시 실패였다.
이유는 preventDefault 메서드는 현재 요소의 기본 이벤트를 막는 기능이기 때문이다.
즉, 위와 같은 상황에서 사용시, 체크박스의 체크 기능을 막아버리는 것이다.
2. 해결책: e.stopPropagation()
비슷한 상황을 검색하다보니, 특별한 로직이 아닌 문제 해결을 위한 기본메서드를 찾을 수 있었다.
e.stopPropagation() 사용시 해당 요소의 이벤트만 동작하며 다른 이벤트(부모 요소의) 이벤트들은 막는다.
const test = (e) => {
e.stopPropagation(); // 이 요소를 제외한 부모 요소들의 이벤트를 막는다.
// e.preventDefault(); // 이건 이 요소의 기본 이벤트를 막는다.
console.log("test")
}
비교적 허무하게(?) 해결되었다
결론
쉽게 해결 된 문제라 다행이지만서도, 한편으론 이런 간단한 해결책도 모르고 있었다는 점이 아쉬움이 남는다.
어서 지금 진행하는 프로젝트를 끝낸 후, 책으로 좀 더 깊게 Java Script를 공부해야겠다는 생각이 든다
'Front End' 카테고리의 다른 글
[React + TypeScript] 비동기 반복문으로 멋지게 처리하기 (0) | 2022.07.22 |
---|---|
[React] 리액트에서 멋지게 클래스 사용하기 (0) | 2022.05.28 |
[React] Input: Text 훌륭하게 구현하기 (0) | 2022.05.20 |
React + Type Script 로 팝업창 만들기( + Type {children: Element} has no properties )에러 해결방법 (0) | 2022.05.18 |
[TypeScript] 객체 속 객체(?)의 타입을 정의하는 방법 (0) | 2022.05.12 |