[React] Movie app clone coding : Component State
4-1. Thinking in React: Component State
- setTimeout documentation : https://www.w3schools.com/jsref/met_win_settimeout.asp
State
State
는 react component 안에 있는 object 이다.
state
가 바뀔 때마다, component
는 다시 render
한다. 즉, component
안에 state
가 바뀔 때마다 render
가 발생한다.
1class App extends Component { // (1) component 안에 state가 바뀔 때마다
2 render() { // (2) render() 가 발생
3 ...
4 }
5}
state를 만드는 방법
1class App extends Component {
2 state = { // State 작성
3 greeting : 'Hello!'
4 }
5
6/* component가 mount 되면 5초를 기다리고 greeting을 업데이트한다.
7 * 아래 코드는 component가 mount할 때마다,
8 * greeting을 'hello' → 'hello again' 으로 변경한다는 의미이다.
9 * 아래의 render가 다시 작동해서 5초 후에 'hello again'으로 변경이 된다.
10 */
11
12 componentDidMount() {
13 setTimeout(() => {
14 this.setState({ // 새로운 state를 만든다.
15 greeting: 'Hello again!'
16 })
17 }, 5000)
18 }
19
20/* 아래의 render가 5초후 다시 작동되면 hello again으로 변경*/
21 render() {
22 return (
23 <div className="App">
24 {this.state.greeting} // render에서 읽어들임
25 {movies.map((movie, index) => {
26 return <Movie title={movie.title} poster={movie.poster} key={index} />
27 })}
28 </div>
29 );
30 }
31}
state ={ greeting : 'Hello!' }
는 component 를 default state와 함께 load 하는 방법이고, component가 componentDidMount() {setTimeout(() => ...)}
한 후에는 5초 후에 ‘Hello again!’ 이 되도록 입력했다.
-
주의 💡
아래와 같이 작성하여 greeting을 업데이트 하지는 않는다.
this.state.greeting
처럼 state를 직접적으로 쓰면 안된다. 직접적으로 변경하면 render 설정들이 작동하지 않는다.this.setState
를 사용해야 한다.
1 componentDidMount() {
2 setTimeout(() => {
3 this.state.greeting = 'something'
4 }, 5000)
5 }
정리
state
를 바꿀 때는 setState
를 설정하고 업데이트할 때마다 새로운 state
와 함께 render
가 작동한다.