반응형
1.
JSX랑 JavaScript는 섞어 쓰지 않는 게 좋다.
이 경우 자바스크립트로 작성한 것은 class의 메서드로 만들면 보기도 좋다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
render() {
return (
<div>
<div>{this.state.first} x {this.state.second} = ?</div>
<form onSubmit={(e) => {
e.preventDefault();
if (parseInt(value) === this.state.first * this.state.second) {
this.setState({
result: '정답',
first: Math.ceil(Math.random() * 9),
second: Math.ceil(Math.random() * 9),
value: '',
});
} else {
this.setState({
result: "땡",
value: '',
})
}
}}>
<input type="number" value={this.state.value} onChange={(e) => this.setState({ value: e.target.value})} />
<button>입력</button>
</form>
<div>{this.state.result}</div>
</div>
);
}
|
cs |
위의 경우 JSX와 자바스크립트를 함께 작성한 케이스이다.
이를 아래와 같이 클래스의 메서드로 만들 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
class GuGuDan extends React.Component {
// .. 생략 .. //
onSubmit = (e) => {
e.preventDefault();
if (parseInt(value) === this.state.first * this.state.second) {
this.setState({
result: '정답',
first: Math.ceil(Math.random() * 9),
second: Math.ceil(Math.random() * 9),
value: '',
});
} else {
this.setState({
result: "땡",
value: '',
})
}
};
onChange = (e) => {
this.setState({ value: e.target.value})
};
render() {
return (
<div>
<div>{this.state.first} x {this.state.second} = ?</div>
<form onSubmit={this.onSubmit}>
<input type="number" value={this.state.value} onChange={this.onChange} />
<button>입력</button>
</form>
<div>{this.state.result}</div>
</div>
);
}
|
cs |
onSubmit={this.onSubmit}과 onChange={this.onChange}가 바뀐 부분이다.
또한, 이렇게 따로 빼서 만들어준 함수는 꼭 화살표 함수로 작성해야 한다.
화살표 함수가 아닌 function으로 작성하면 this가 달라지게 되어 작동하지 않는다.
반응형
'React' 카테고리의 다른 글
[React] 리액트를 왜 사용하는가 (0) | 2021.10.02 |
---|---|
[React] 리액트의 불변성 (스프레드 연산자 이용하여 불변성 지키기) (0) | 2021.09.30 |
[React] 리액트 프로젝트를 깃허브에 배포하는 방법 (GitHub Pages) (0) | 2021.09.05 |
[React] 리액트에서 REST API 구축하기 (+REST API란?) (0) | 2021.09.03 |
[React] json-server --watch 실행 시 에러 해결 (8) | 2021.09.03 |