State란?
state란 컴포넌트의 변경 가능한 데이터를 관리하는 데 사용되는 자바스크립트 객체.
컴포넌트의 상태를 저장하고 변경할 수 있다.
데이터에 변화가 생기면 리렌더링을 통해 화면에 업데이트 된다.
클래스 컴포넌트에서 state 사용하기
import React, { Component } from 'react';
// Counter라는 클래스 컴포넌트
class Counter extends Component {
constructor(props) { //생성자, 클래스 생성될 때 실행되는 함수
super(props);
this.state = { //현재 컴포넌트의 state 정의
count: 0
};
}
//setState()를 호출해 새로운 상태 설정
addCount = () => {
this.setState({ count: this.state.count + 1 });
};
render(){
return(
<div>
<div>Count: {this.state.count}</div>
<button onClick={this.addCount}>Add</button>
</div>
);
}
}
export default Counter;
위와 같이 state는 this.setState() 메서드를 통해서만 변경할 수 있다.
왜 setState()메서드를 사용해야 하는 걸까?
아래처럼 직접 수정할 수도 있지만 리액트는 Virtual DOM을 사용해 컴포넌트의
상태변화를 감지하고 필요한 부분만 업데이트하는 최적화된 렌더링 방식을 쓰기 때문에
state를 직접 수정하여 값을 변경했을 때 리액트가 상태변화를 감지하지 못하고
제대로 렌더링이 되지 않을 수 있다.
this.state = {
count: this.state.count + 1
}
그래서 반드시 state를 변경할 때에는 아래와 같이 setState() 메서드를 써야 한다.
이는 해당 상태 변경을 비동기적으로 처리하므로 예상치 못한 오류를 방지할 수 있다.
(해당 상태 변경이 바로 반영되지 않고 다음 렌더링 사이클에서 반영된다.)
this.setState({
count: this.state.count + 1
});
'02_STUDY > React' 카테고리의 다른 글
[ React ] 리액트 함수형 컴포넌트의 훅 Hook에 대해서 ( useState, useEffect, useContext, useMemo, useCallback, useRef ) (0) | 2023.08.10 |
---|---|
[ React ] 리액트 컴포넌트의 생명주기 ( mount → update → unmount ) (0) | 2023.08.08 |
[ React ] 리액트 컴포넌트와 props :: 데이터 전달 및 재사용 가능한 UI구성 (0) | 2023.08.05 |
[ React ] 리액트의 Render에 대하여:: Virtual DOM과 리렌더링 (0) | 2023.08.05 |
[ React ] HTML 같기도 하지만 JSX라고 합니다. JSX란 무엇인가? (0) | 2023.08.05 |