리액트의 이벤트 시스템은 웹브라우저의 HTML 이벤트와 사용법이 유사하다.
<button onClick={() => {
this.setState({
number: this.state.number + 1
})
}}>
<MyComponent onClick={doSomething} /> // (X)
<div onClick={this.props.onClick}>...</div> // (O)
<input
type="text"
name="message"
placeholder="메시지 입력"
onChange={e => console.log(e.targe.value)}
/>
함수를 미리 준비하여 전달하는 방법 : 임의메서드
class EventPractice extends Component {
constructor() {
this.handleChange = this.handleChange.bind(this)
}
state = { ... }
handleChange(e) {
this.setState({
message: e.target.value
})
}
render() {
return (
<div>
<input
type="text"
name="message"
placeholder="메시지 입력"
onChange={this.handleChange}
/>
</div>
)
}
}
Property Initializer Syntax을 사용한 임의메서드 작성
class EventPractice extends Component {
state = { ... }
handleChange = (e) => {
this.setState({
message: e.target.value
})
}
render() {
return (
<div>
<input
type="text"
name="message"
placeholder="메시지 입력"
onChange={this.handleChange}
/>
</div>
)
}
}
class EventPractice extends Component {
state = { ... }
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value
})
}
render() {
return (
<div>
<input
type="text"
name="message"
placeholder="메시지 입력"
onChange={this.handleChange}
/>
<div>
<input
type="text"
name="message2"
placeholder="메시지 입력2"
onChange={this.handleChange}
/>
</div>
)
}
}