더북(TheBook)

변경을 감지하려면 컴포넌트에 이벤트 핸들러를 정의하고(JSX의 {}에 인라인으로 작성할 수도 있다) onChange 속성으로 이벤트 핸들러를 전달해주면 된다. 예를 들어 다음 예제 코드는 이메일 입력 영역의 변경을 감지하는 경우다(ch07/elements/jsx/content.jsx).

 

예제 코드 7.4 폼 요소의 렌더링과 변경 감지하기

handleChange(event) {
    console.log(event.target.value)
}
render() {
    return <input
        type="text"
        onChange={this.handleChange}
        defaultValue="hi@azat.co"/>
}

 

흥미로운 점은 onChange를 정의하지 않고 value만 입력하면 React가 경고를 보내고 요소를 읽기 전용으로 만든다는 점이다. 읽기 전용 영역이 필요한 경우라면 명시적으로 readOnly 속성을 추가하는 것이 좋다. 이렇게 하면 경고도 제거할 수 있고, 코드를 보는 다른 개발자도 입력 영역이 읽기 전용으로 설계되었다는 것을 알 수 있다. 값을 명시적으로 설정하려면 readOnly={true}라고 작성하거나, 값 없이 readOnly 속성만 작성해도 React에서 해당 속성의 값을 true로 간주한다.

요소의 변경을 감지하면 컴포넌트 상태에 저장할 수 있다.

handleChange(event) {
  this.setState({emailValue: event.target.value})
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.