Front-end/React

함수형 컴포넌트에서 이벤트 핸들러 정의하기

mooyou 2024. 12. 25. 17:49
728x90
300x250

 

함수형 컴포넌트 내부에서 이벤트 핸들러를(특정 이벤트가 발생했을 때 실행되는 함수) 지정하는 방법에는 두 가지 주요 방법이 있다

  1. 함수 안에 또 다른 함수로 정의하는 방법
  2. 화살표 함수(arrow function)을 사용하는 방법

두 방법은 이벤트 핸들러를 정의하는 방식에서 차이가 있으며, 각각의 방식에 따라 this바인딩 및 성능에 영향을 줄 수 있다.

 

1. 함수 안에 또 다른 함수로 정의하는 방법

이 방식에서는 이벤트 핸들러를 별도의 함수로 정의하고, 그 함수 안에서 이벤트를 처리하는 방식이다.

import React from "react";

function DynamicHandler() {
  function handleClick(action) {
    // 동적으로 내부 함수를 생성
    function greet() {
      alert(`Hello, ${action}!`);
    }
    return greet;
  }

  return (
    <div>
      <h1>동적 이벤트 핸들러 예제</h1>
      <button onClick={handleClick("World")}>인사하기</button>
      <button onClick={handleClick("React")}>React에 인사하기</button>
    </div>
  );
}

export default DynamicHandler;

 

1. handleClick 함수는 외부에서 실행 가능한 핸들러를 반환한다.

- 이 함수 안에서  greet라는 내부 함수를 생성하여 반환한다.

 

2. handleClick 호출 시 동적으로 특정 값을 기반으로 핸들러를 생성한다.

- 인사하기 버튼을 클릭하면 "Hello, World!"를 보여주는 핸들러가 생성된다.

- React에 인사하기 버튼을 클릭하면 "Hello, React!"를 보여주는 핸들러가 생성된다.

 

 

2. 화살표 함수(arrow function)을 사용하는 방법

화살표 함수를 사용하면, this가 자동으로 바인딩되므로 별도의 bind()를 호출할 필요 없이 이벤트 핸들러에서 this를 사용할 수 있다. 이 방법은 클래스 컴포넌트에서 주로 사용되며, 함수 컴포넌트에서는 주로 이벤트 핸들러를 인라인으로 정의할 때 사용된다.

import React from "react";

const MyComponent = () => {
  // 화살표 함수로 이벤트 핸들러 정의
  const handleClick = () => {
    console.log("Button clicked!");
  };

  return <button onClick={handleClick}>Click Me</button>;
};

export default MyComponent;

 

화살표 함수를 사용하여 this바인딩 문제가 없으며, 코드가 직관적이다.

리렌더링마다 새로운 함수 객체가 생성되지 않으므로 React가 불필요하게 리렌더링을 트리거하지 않는다.

 

 


 

 

함수 컴포넌트 내에서 이벤트 핸들러를 정의할 때 두 가지 방법이 모두 가능하고, 어떤방법을 선택할지는 코드의 가독성과 성능에 따라 결정하면 좋다. 성능 최적화를 고려한다면 첫 번째 방법처럼 함수 외부에서 정의하고, 간결함을 원하면 두번째 방법처럼 화살표 함수를 사용하면 된다.

 

728x90
반응형