이벤트 전파
export default function Toolbar() {
return (
<div className="Toolbar" onClick={() => {
alert('You clicked on the toolbar!');
}}>
<button onClick={() => alert('Playing!')}>
Play Movie
</button>
<button onClick={() => alert('Uploading!')}>
Upload Image
</button>
</div>
);
}
위 코드에서 버튼을 클릭하면 해당 버튼 이벤트 핸들러의 함수가 먼저 실행되고 이후 div 태그의 이벤트 핸들러 함수가 실행된다.
하지만 버튼이 아닌 툴바만을 클릭하면 div의 이벤트 핸들러 함수만 실행된다.
이벤트 전파를 방지하는 방법
function Button({ onClick, children }) {
return (
<button onClick={e => {
e.stopPropagation();
onClick();
}}>
{children}
</button>
);
}
export default function Toolbar() {
return (
<div className="Toolbar" onClick={() => {
alert('You clicked on the toolbar!');
}}>
<Button onClick={() => alert('Playing!')}>
Play Movie
</Button>
<Button onClick={() => alert('Uploading!')}>
Upload Image
</Button>
</div>
);
}
e.stopPropagation()를 통해 해결할 수 있다.
https://ko.react.dev/learn/responding-to-events
'프론트엔드 > Javascript' 카테고리의 다른 글
[Javascript] 이벤트 루프 작동방식(GPT 4.0) (0) | 2024.08.09 |
---|---|
객체 자료형, 이터러블 객체, 유사 배열의 관계 (0) | 2024.06.02 |
바람직한 함수명 짓기 (0) | 2024.05.28 |
바람직한 변수명 짓기 (0) | 2024.05.28 |
JS 원시형과 참조형의 차이 (0) | 2024.05.27 |