일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AWS
- Algorithm
- 장고
- 알고리즘 풀이
- 파이썬
- 알고리즘
- DRF
- PYTHON
- API
- web
- java
- 백준
- CSS
- 파이썬 알고리즘
- js
- Django
- HTML
- react
- django widget
- es6
- 알고리즘 연습
- django rest framework
- Git
- javascript
- django ORM
- c++
- MAC
- Baekjoon
- form
- 알고리즘 문제
- Today
- Total
수학과의 좌충우돌 프로그래밍
[React] Class Component 와 State 본문
저번 포스팅에서 살펴봤듯이 component를 만드는 방법은 function 을 이용하는 방법과 class 를 이용하는 방법이 존재합니다.
이번 포스팅에서는 class component 를 알아보도록 하겠습니다.
class component
이를 통해 component 를 생성하는 방법은 어렵지 않습니다.
React.Component
를 상속받는 class 를 하나 선언하고 render
메소드 내에서 JSX 를 통해 return 을 해줍니다.
react 는 자동적으로 class component 의 render 메소드를 실행하게 됩니다.
import React from 'react';
class App extends React.Component {
render() {
return <h3>Hello World</h3>;
}
}
export default App;
굳이 function component 를 제쳐두고 다시 class component 를 하는 이유가 무엇일까요? 바로 state
때문입니다.
state
기존에 props
는 Parent component 에서 받아온 정적인 데이터였다면 state
는 내부에서 선언하고 값을 바꿀 수 있는 동적인 데이터입니다.
state
를 사용해보도록 합시다.
import React from 'react';
class App extends React.Component {
state = {
count: 0
}
render() {
return <h3>Hello World</h3>;
}
}
export default App;
state
를 render 메소드 안에서 사용하고 싶은 경우 다음과 같이 접근이 가능합니다.
import React from 'react';
class App extends React.Component {
state = {
count: 0
}
render() {
return <h3>Hello World {this.state.count}</h3>;
}
}
export default App;
위에서 state
는 바꿀 수 있는 동적인 데이터라고 했습니다.
이번에는 어떻게 값을 바꾸는지 알아보도록 하겠습니다.
button
에 onClick
으로 add 함수와 minus 함수를 연결시켜서 버튼을 누를 시마다 state 의 값을 바꾸게 하였습니다.
import React from 'react';
class App extends React.Component {
state = {
count: 0
}
add = () => {
this.state.count += 1;
}
minus = () => {
this.state.count -= 1;
}
render() {
return <div>
<h3>count: {this.state.count}</h3>
<button onClick={this.add}>+</button>
<button onClick={this.minus}>-</button>
</div>
}
}
export default App;
하지만 이는 에러가 발생합니다.
에러 메시지를 보면 state
를 직접 변경하지 말라고 합니다.
Do not mutate state directly. Use setState()
이는 state가 바뀌고 render가 새롭게 호출되지 않기 때문에 값이 바뀐 component 를 반환해줄 수 가 없는 문제가 발생합니다.
이를 자동으로 해주는 것이 존재합니다.
바로 setState
이죠.
이는 state
를 refresh 를 한 후에 render 를 호출합니다.
이 때 virtual DOM 에 의해서 바뀌는 state
부분만 refresh 하게 되고 이는 성능에 큰 영향을 미칩니다.
그러면 setState 를 사용해보겠습니다.
import React from 'react';
class App extends React.Component {
state = {
count: 0
}
add = () => {
this.setState({ count: this.state.count + 1 });
}
minus = () => {
this.setState({ count: this.state.count - 1 });
}
render() {
return <div>
<h3>count: {this.state.count}</h3>
<button onClick={this.add}>+</button>
<button onClick={this.minus}>-</button>
</div>
}
}
export default App;
this.state.count
를 사용하는 것은 외부의 상태에 의존하게 되기 때문에 별로 좋은 방법은 아닙니다.
다음과 같이 함수로 인자로서 current
로 현재 state
를 넘겨줄 수 있습니다.
add = () => {
this.setState(current => ({ count: current.count + 1 }));
}
current
를 적용한 최종적인 코드는 다음과 같습니다.
import React from 'react';
class App extends React.Component {
state = {
count: 0
}
add = () => {
this.setState(current => ({ count: current.count + 1 }));
}
minus = () => {
this.setState(current => ({ count: current.count - 1 }));
}
render() {
return <div>
<h3>count: {this.state.count}</h3>
<button onClick={this.add}>+</button>
<button onClick={this.minus}>-</button>
</div>
}
}
export default App;
'웹프로그래밍 > React' 카테고리의 다른 글
[React] Axios 와 CSS (0) | 2020.01.27 |
---|---|
[React] Component Life Cycle method (0) | 2020.01.26 |
[React] Props 와 proptypes (2) | 2020.01.25 |
[React] JSX 와 Component (0) | 2020.01.25 |
[React] React 시작하기, create-react-app (3) | 2020.01.23 |