이벤트 처리 시 주의사항

이인재·2022년 9월 29일

React

목록 보기
8/14
class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = {isToggleOn: true};

    // 콜백에서 `this`가 작동하려면 아래와 같이 바인딩 해주어야 합니다.
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

JSX 콜백 안에서 this의 의미에 대해 주의해야 함.

JavaScript에서 클래스 메서드는 기본적으로 바인딩되어 있지 않다.

this.handleClick을 바인딩하지 않고 onClick에 전달하였다면, 함수가 실제 호출될 때 thisundefined가 된다.

this.handleClick = this.handleClick.bind(this);

위 코드와 같이 바인딩을 해주어야 한다.

0개의 댓글