220817 TIL onClick 함수 호출 왜 안돼..?

2022. 8. 17. 23:50·성장이야기/TIL

오늘은 리액트로 Todo List 만들다가 발생한 onClick 이벤트 오류에 대해서 정리해보려고 한다.

 

할 일 추가 버튼과 삭제 버튼을 따로 만들어서 각각의 버튼에 onClick으로 함수를 넣어줬다.

 

할 일 추가 버튼 코드

주석처리된 코드는 안보셔도 됩니다.

삭제 버튼 추가 코드

 

할 일 추가 버튼을 눌렀을 때 호출되는 함수는 handleClickPost

삭제 버튼을 눌렀을때 호출되는 함수는 handleClickDelete

할 일을 지우기 위해 삭제버튼을 눌렀을 때 어떤 할 일을 삭제해야 하는지 알기 위해 task.id(식별자) 값을 함수에 매개변수로 전달해주려고 했다.

 

이렇게 하고 할 일을 삭제 하려고 삭제 버튼을 누르는데 아무리 눌러도 삭제가 되지 않았다.

그래서 버튼이 안 먹는건가 생각해서 handleClickDelete 함수가 호출이 되고 있는지 확인하기 위해 console.log("clicked")를 추가했다.

 

그랬더니 발생한 일이....

 

console 창에 삭제 버튼을 누르면 clicked가 뜨는 게 아니라 

추가 버튼을 누르면 clicked가 뜨고 있는걸 발견할 수 있었다....  1차 멘붕

 

css적용 안해서 못생겼습니다..

정확히 추가 버튼 8번 눌렀더니 오른쪽 콘솔 창 보면 clicked가 8번 찍힌 걸 확인할 수 있다.

??????

분명 나는 추가 버튼을 눌렀는데 왜 handleClickDelete 함수가 호출되고 있는건지 영문을 알 수가 없었다.

 

진짜 이거 해결하려고 3시간 넘게 별의별짓을 다해봤다.

버튼의 타입이 잘못됬나?? 

처음에는 form 태그 안에 버튼이 들어가 있어서 버튼이랑 폼 태그랑 id를 일치시켜야 해당하는 버튼의 함수가 호출되는 건가???

함수 선언 순서가 영향을 미치는 건가??  등등... 내가 생각할 수 있는 건 다 해봤는데 안돼서 2차 멘붕..

 

 

그리고 구글링 하다가 발견한 말도 안 되는 정보도 시도해 봤다..

함수명이 비슷해서 그럴 수도 있다고... 바꿔보래서 바꿔본 나.. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 지금 생각하니 어이없네..; 

함수명이 비슷하다고 다른 함수가 호출되면 어쩌란교.. 

역시 정보의 바닷속에서 팩트를 찾기란 너무 어렵다..

 

해결 방법

바닷속을 헤매다 드디어 해결 방법을 발견했다.

onClick 함수에 매개변수를 전달할 때 익명 함수를 사용하는 방법이었다.

 

위 코드처럼 삭제 버튼을 눌렀을 때 새로운 익명 함수를 만들어서 handleClickDelete 함수를 작동하게 할 수 있었다

익명 함수(Anonymous function)란?

익명 함수는 함수를 만들 때 함수명을 지정하지 않고 변수를 선언해서 함수명 대신 변수명에 함수 코드를 저장하는 구현 방식이다. 

 

 

맨날 문제 막혀서 멘붕오다 겨우겨우 해결했을때 느끼는 짜릿함이라고 해야 하나..?  무튼 좋았다는 소리

한번에 해결되면 좋을텐데 맨날 2~3시간씩 써서 겨우겨우 해결...

 

어쨌든 해결은 했는데 아직도 해결이 되지 않은 건 익명 함수 사용하기 이전에 추가 버튼을 눌렀을 때  handleClickDelete 함수가 호출된 이유를 모르겠다.

 

삭제 버튼에서 호출되는 함수에 문제가 있었으면 아무 일도 안 일어나면 되는데 할 일이 추가가 되고 삭제 버튼의 함수도 호출이 돼버려서

추가가 되자마자 삭제가 돼버리는 기이한 현상이 발생했었다.

 

이거는 아무리 찾아도 안나오던데.. todolist부터 빨리 완성시키자..

 

'성장이야기 > TIL' 카테고리의 다른 글

220819 TIL 개념을 챙기자  (0) 2022.08.19
220818 TIL 아침을 깨우자  (0) 2022.08.18
220816 TIL 뭣이 중헌디?  (0) 2022.08.16
220815 TIL 비효율적인 하루  (0) 2022.08.15
220814 TIL Hello, JavaScript!  (0) 2022.08.14
'성장이야기/TIL' 카테고리의 다른 글
  • 220819 TIL 개념을 챙기자
  • 220818 TIL 아침을 깨우자
  • 220816 TIL 뭣이 중헌디?
  • 220815 TIL 비효율적인 하루
seungjjun
seungjjun
  • seungjjun
    개발이야기
    seungjjun
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 성장이야기
        • TIL
        • 주간회고
      • Java
        • Spring
        • Spring Security
      • 트러블슈팅
      • Kafka
      • OS
      • Network
      • 메가테라
      • Database
      • Algorithm
      • Git
      • HTML
      • CSS
      • 독서
      • 컴퓨터 이해하기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    항해99
    redis
    메가테라 주간회고
    항해플러스
    graphQL
    이커머스 프로젝트
    Til
    메가테라
    주간회고
    개발일지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seungjjun
220817 TIL onClick 함수 호출 왜 안돼..?
상단으로

티스토리툴바