4.1 리액트의 이벤트 시스템
4.1.1 이벤트를 사용할 때 주의 사항
- 이벤트 이름은 카멜 표기법으로 작성
- 이벤트에 실행할 자바스크립트 코드를 전달하는 것이 아니라, 함수 형태의 값을 전달.
- DOM 요소에만 이벤트를 설정할 수 있음. (직접 만든 컴포넌트에는 이벤트를 설정할 수 없음.)
4.1.2. 이벤트 종류
4.2 예제로 이벤트 핸들링 익히기
4.2.1 컴포넌트 생성 및 불러오기
4.2.2 onChange 이벤트 핸들링하기
import React, {Component} from "react";
class EventPractice extends Component {
state = {
message: ''
}
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="message" placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={(e) => {
this.setState({message: e.target.value})
}}/>
<button onClick={() => {
alert(this.state.message);
this.setState({
message: ''
});
}}>확인</button>
</div>
);
}
}
export default EventPractice;
4.2.3 임의 메서드 만들기
//함수 주입
//함수가 호출될 때 this는 호출부에 따라 결정되므로, 클래스의 임의 메서드가 특정 html요소의 이벤트로 등록되는 과정에서
//메서드와 this의 관계가 끊어져 버림.
import React, {Component} from "react";
class EventPractice extends Component {
state = {
message: ''
}
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleChange(e) {
this.setState({
message: e.target.value
});
}
handleClick() {
alert(this.state.message);
this.setState({
message: ''
});
}
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="message" placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={this.handleChange}/>
<button onClick={this.handleClick}>확인
</button>
</div>
);
}
}
export default EventPractice;
// 바벨의 transform-class-properties 문법을 사용하여 화살표 함수 형태로 메소드를 정의
import React, {Component} from "react";
class EventPractice extends Component {
state = {
message: ''
}
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
this.handleClick = this.handleClick.bind(this);
}
handleChange(e) {
this.setState({
message: e.target.value
});
}
handleClick() {
alert(this.state.message);
this.setState({
message: ''
});
}
render() {
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="message" placeholder="아무거나 입력해 보세요"
value={this.state.message}
onChange={this.handleChange}/>
<button onClick={this.handleClick}>확인
</button>
</div>
);
}
}
export default EventPractice;
4.2.4 이벤트 여러개 다루기
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value
});
}
4.2.5 onKeyPress 이벤트 핸들링
4.3 함수형 컴포넌트로 구현해 보기
import React, {useState} from "react";
const EventPractice = () => {
const [form, setForm] = useState({username: '', message: ''})
const {username, message} = form;
const onChange = e => {
const nextForm = {
...form,
[e.target.name]: e.target.value
}
setForm(nextForm);
}
const onClick = () => {
alert(username + ':' + message);
setForm({
username: '',
message: ''
})
}
const onKeyPress = e => {
if (e.key === 'Enter') {
onClick();
}
}
return (
<div>
<h1>이벤트 연습</h1>
<input type="text" name="username" placeholder="사용자명" value={username}
onChange={onChange}/>
<input type="text" name="message" placeholder="아무거나 입력해 보세요"
value={message}
onChange={onChange}
onKeyPress={onKeyPress}/>
<button onClick={onClick}>확인
</button>
</div>
);
}
export default EventPractice;
'개발 도서 > 리액트를 다루는 기술(개정판)' 카테고리의 다른 글
6장 컴포넌트 반복 (0) | 2020.05.23 |
---|---|
5장 ref:DOM에 이름 달기 (0) | 2020.05.23 |
3장 컴포넌트 (0) | 2020.05.17 |
2장 JSX (0) | 2020.05.16 |
1장 리액트 시작 (0) | 2020.05.16 |