inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스

11-01-event-bubbling

이벤트 핸들러 관련 질문드려요!

해결된 질문

247

asdqqq

작성한 질문수 13

0

안녕하세요! 이벤트처리 함수 관련해서 질문드립니다.
현재는 event를 넘겨서 처리하고 있다보니 currentTaget이니 target이니 신경 쓸 것이 많은데,
<div onClick(() => onClickAlert(el.writer)} > 이렇게 바로 id의 값을 바인딩시켜줘도 되지 않나요?

혹시 수업에서와 같이 <div id={el.writer} onClick={onClickAlert}> id 속성을 부여하고 이를 onClickAlert에서 event를 받아서 처리해야만 하는 상황이나 위와 같이 했을 때의 이점이 있는지 궁금합니다!


항상 좋은 강의 감사드려요!

react node.js seo graphql next.js

답변 1

0

노원두

안녕하세요! asdqqq님!

현재 상황에서는 두 방식 모두 동일합니다!^^
(내부적으로 굳이 따지자면, 함수가 1개 더 만들어지다보니 메모리 사용량은 더 늘어나긴 하지만,
사용적인 측면에서는 두 방식 모두 동일하므로 어떤 것을 사용하셔도 무관해요!)

하지만, 아래처럼 두 방식이 동일하지 않은 상황도 있으므로 다른 사람이 만든 코드를 리딩하시기 위해서는 이벤트 위임에 관한 개념은 꼭 익혀두세요!

// 리팩토링전 코드
<div>
    <span onClick={() => onClickAlert(el.number)}>{el.number}</span>
    <span onClick={() => onClickAlert(el.title)}>{el.title}</span>
    <span onClick={() => onClickAlert(el.writer)}>{el.writer}</span>
</div>


// 리팩토링후 코드
<div onClick={onClickAlert} > // onClickAlert에서 event.target 사용
    <span>{el.number}</span>
    <span>{el.title}</span>
    <span>{el.writer}</span>
</div>

또한, 컴포넌트 조립 상황에서의 이벤트 위임시 위 두 상황이 달라질 수 있으므로 이것 또한 고려해 볼 수 있을 것 같아요!

 

추가적인 첨언을 드리자면, onClick 내에서 로직까지 첨부하시는 것은 지양해 주세요!

// 아래처럼 로직까지 들어가는 경우는 로직과 뷰가 분리되지 않기 때문에
// 가독성을 해치고 유지보수성을 떨어뜨립니다!
// 추후, 성능 개선을 위한 메모이제이션코드가 들어가게되면 더 복잡해져요!
<div onClick={() => {
    const aaa = 3;
    alert("안녕하세요");
}}>
    클릭하세요
</div>

 

마지막으로, 뒷부분에서 HOF를 배우시게 되는데, 이는 앞선 두 방식보다 상당히 편리하므로 이 부분에서 한번의 추가적인 리팩토링이 들어갈 것 같네요!^^

 

0

asdqqq

답변 감사드립니다!

fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다

0

36

1

댓글 기능 구현 중 질문드립니다.

0

66

1

쿠폰코드 발급

0

132

2

example 서버 플레이그라운드, API 접속 모두 안됩니다.

0

86

2

문의드립니다!! ㅠㅠ

0

101

2

graphql 백엔드 서버가 포폴용 빼곤 접속이 안됩니다.

0

76

2

_app.js 작성 이후로 에러가 발생하네요

0

93

2

학습자료

0

70

2

학습자료가 안열립니다.

0

49

2

플레이 그라운드 퀴즈 문제 질문이 있습니다.

0

59

0

기존강의 구매자, 업데이트 끝인가요?

0

109

3

업데이트 버전 수강

0

88

2

완벽한 프론트엔드

0

136

2

나만의 쇼핑몰 샘플 페이지 접속 확인부탁드립니다.

0

82

1

graphql 접속이 안됩니다.

0

100

2

const, let 사용 질문 드립니다.

0

70

2

싸이월드 만들기 1탄 피드백 부탁드립니다.

0

122

2

회원가입 과제 피드백 부탁드립니다.

0

80

2

styled.span / styled.input "CSS 자동완성"

0

47

1

쿠폰 발급 관련

0

166

2

서버 502 error

0

247

2

쿠폰 다시 부탁드려도 될가여?

0

140

2

a태그 패딩했을때 왜 크기가 줄어들지 않고 늘어나나요

0

184

2

2분 44초 질문

0

131

3