[React] 이벤트에서 함수 호출하기

2021. 3. 15. 12:29·React/React Basic

이벤트에 함수 전달하기

onClick과 같은 이벤트에는 아래와 같이 일반적으로 함수를 동작시키는 코드를 작성한다.

함수명 뒤에 ()를 붙이지 않아야한다.

function onClickHandle(){ ... }

<button onClick={onClickHandle}></button>

 

그렇다면 props를 전달하려면 어떻게 해야할까.

()를 삽입하여 props를 함수에게 전달하려면 arrow를 사용하거나 bind 함수를 사용해야한다.

function onClickHandle(btnNum){ ... }

//Arrow 사용
<button onClick={()=>{onClickHandle(1);}}></button>

//Bind 사용
<button onClick={onClickHandle.bind(1)}></button>

 

 

onClick과 같이 매개인자가 전달되지 않는 함수의 경우는 반드시 arrow나 bind를 사용해야한다.

onChange처럼 매개인자를 제공해주는 경우는 ()를 생략해도 된다.

 

이해하기

만약 arrow, bind를 사용하지 않고 함수에 ()를 붙여 이벤트에 전달해주는 경우,

컴포넌트가 랜더링을 하면서 함수가 호출된다. 이벤트가 호출될 때 동작하는게 아니라 랜더링되면서 함수를 호출하라고 읽어버린다.

()를 사용하지 않아야 함수 자체가 전달되며 props가 없을 때 함수를 전달하는 올바른 방법이다.

<button onClick={onClickHandle()}></button>

//쉽게 말해 위의 구문은 아래와 같다는 것이다.

onClickHandle();
<button></button>

props를 전달하는 경우에는 arrow, bind를 사용해야하는데, 이는 함수 자체를 전달하는 것이 아니라 새로운 함수를 생성하는 것이다.

즉, onClickHandle(1)이라는 함수를 onClick에서 새롭게 생성하는 것이다. 따라서 성능이 저하될 수 있다.

공식문서에도 render내에서 arrow를 사용하면 최적화가 깨질 수 있다고 하니 남발하는 것은 좋지 않겠다.

render밖에서 함수 자체를 arrow로 생성하도록하자.

 

또한, 클래스형에서는 this를 사용해 함수를 호출하는 경우가 많은데 bind를 하지 않을 경우 this가 undefined를 가리키게 되므로 bind 혹은 arrow를 사용하는 것이다.

 

아래 공식문서에 자세한 설명이 되어 있으니 깊은 이해를 원하면 참고하길 바란다.

 

컴포넌트에 함수 전달하기 – React

A JavaScript library for building user interfaces

ko.reactjs.org

저작자표시 비영리 변경금지 (새창열림)

'React > React Basic' 카테고리의 다른 글

[리액트] Ref에 관하여 (useRef)  (0) 2021.07.31
[React] 컴포넌트간 props 전달  (2) 2021.07.25
[React] JSX 기본 익히기  (0) 2021.03.11
[React] 전통적인 Context 이해하기.  (0) 2021.01.21
[React] Hook과 상태관리(useState)  (0) 2021.01.21
'React/React Basic' 카테고리의 다른 글
  • [리액트] Ref에 관하여 (useRef)
  • [React] 컴포넌트간 props 전달
  • [React] JSX 기본 익히기
  • [React] 전통적인 Context 이해하기.
박유상의 개발블로그
박유상의 개발블로그
개발블로그
  • 박유상의 개발블로그
    박유상의 개발블로그
    박유상의 개발블로그
  • 전체
    오늘
    어제
    • 전체 (134)
      • Who am I (10)
        • Portfolio (4)
        • Reminiscence (5)
        • Oversea (1)
        • SiliconValley (0)
      • React (36)
        • React Basic (15)
        • React Tech (5)
        • JavaScript (7)
        • TypeScript (3)
        • CSS&HTML (3)
        • Firebase (3)
      • NodeJS (1)
        • NodeJS Basic (1)
      • Flutter (55)
        • Flutter Widget Design (5)
        • Flutter Widget Basic (8)
        • Flutter Tech (18)
        • Flutter Issue (7)
        • Flutter Web (6)
        • About Flutter (2)
        • Firebase (1)
        • Dev Env (1)
        • Dart (7)
      • Programming (31)
        • Web (1)
        • General (0)
        • Algorithm (25)
        • Python (1)
        • VS Code (2)
      • Django (0)
  • 블로그 메뉴

    • Who I AM
    • React
    • NodeJS
    • Flutter
    • Programming
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    useRef
    Firebase
    자바스크립트
    링고리
    DART
    github
    map
    알고리즘
    Python
    useState
    flutter web
    HTML
    Redux
    Lingory
    TypeScript
    포트폴리오
    Flutter
    react
    리액트
    JavaScript
    플러터 웹
    탐욕법
    파이썬
    JSON
    웹
    프로그래머스
    useTranslation
    DP
    플러터
    CSS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
박유상의 개발블로그
[React] 이벤트에서 함수 호출하기
상단으로

티스토리툴바