React의 이벤트 핸들러에서 "Cannot read property '〇〇' of undefined"라고 나온다

ES6 기법으로 React 코드를 쓰고 있을 때 이벤트 핸들러 내에서 this 를 사용할 수 없게 되었기 때문에 그 원인을 공유합니다.

문제 코드



App.jsx
class App extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            status: "No"
        };
    }
    changeState() {
        this.setState({ status: "Yes" });
    }
    render() {
        return (
            <div>
                <button onClick={ this.changeState }>Change!</button>
                <div>{this.state.status}</div>
            </div>
        );
    }
}

이 경우 브라우저에서 실행해 보면 다음과 같이 표시됩니다.

이 버튼을 누르면 표시되는 문자가 'Yes'로 바뀔 것입니다만, 변하지 않고 아래와 같은 에러가 발생했습니다.


해결책


render() 함수의 onClick에서 다음과 같이 변경합니다.

App.jsx
<button onClick={ this.changeState.bind(this) }>Change!</button>

원인



ES5의 React.createClass를 사용하면 이벤트 처리기가 자동으로 bind되지만 ES6에서 React.Component를 만들면 이벤트 처리기가 자동으로 bind되지 않는 것 같습니다.

좋은 웹페이지 즐겨찾기