useState 사용하여 컴포넌트 내에서 바뀌는 값을 관리할 수 있다.
Hook을 통해 useState를 사용할 수 있는데 Hook은 React 16.8버전에 추가된 기능이다.
클래스 컴포넌트를 사용하지 않아도 state를 관리할 수 있다.
useState 사용해보기 (함수형 컴포넌트)
import { useState } from 'react';
const [value, setValue] = useState(0);
<div>{ value }</div>
<button onClick={increase}>증가</button>
function increase() {
setValue(value + 1);
}
증가 버튼을 누르면 value 값이 1씩 증가하는 것을 확인할 수 있다.
클래스형 컴포넌트로 작성해보기
요즘에는 hooks로 인해 함수형 컴포넌트를 사용한다고 한다.
그럼에도 클래스형 컴포넌트로 작성된 코드를 읽어야 하는 상황이 있을 수 있기 때문에 기본 작성방법 정도는 알면 좋다고 한다.
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
value: 0,
};
}
render() {
return (
<div>
<div>{this.state.value}</div>
<button onClick={() => this.setState({ value: this.state.value + 1 })}>증가</button>
</div>
);
}
}
두가지 작성법 모두 사용해봤는데 확실히 클래스형 컴포넌트가 조금 더 어렵고 복잡하게 느껴졌다.
함수형 컴포넌트는 직접적으로 state 변수의 이름만 작성해주어도 된다. 하지만, 클래스형 컴포넌트는함수형 컴포넌트와 달리 데이터 바인딩을 하려면 this.state.value
와 같이 this.state.변수명
형태로 접근해야 한다.
state를 갱신할 때는 클래스형 컴포넌트는 this.setState({ 변수명 : 변경할 값 })
를 호출하여 값을 변경할 수 있다. 함수형 컴포넌트는 this를 호출하지 않고 set변수명()
형태로 작성하여 사용할 수 있다.
클래스형 컴포넌트에서는 this.setState를 호출해서 사용한다. 하지만 함수형 컴포넌트는 this를 가질 수 없기 때문에 useState Hook을 직접 컴포넌트에서 호출한다.
useState는 뭘까?
1. state 변수를 선언할 수 있도록 한다.
일반 변수는 보통 함수가 끝나면 사라지지만, state 변수는 React에 의해 사라지지 않는다.
2. useState의 인자로 무엇을 넘기나?
useState() Hook의 인자로 넘겨주는 값은 state의 초기값이다. 함수 컴포넌트는 클래스형 컴포넌트와 달리 객체일 필요가 없다.
즉, 숫자 또는 문자 타입을 사용할 수 있다.
3. 여러개의 state 변수를 사용하려면?
각각 다른 여러개의 state 변수를 사용하고 싶다면useState()를 여러번 호출하면 된다.
4. useState의 반환값
state 변수와 state변수를 갱신할 수 있는 함수를 반환한다.
const [count, setCount] = useState(0);
위 코드는 count 라는 state변수 선언 및 0으로 초기화한다. React에서 count 변수를 리렌더링 할 때 기억하고 가장 최근에 변경된 값을 제공한다.
count 변수 값을 갱신(변경)하기 위해선 setCount 함수를 호출하면 될 것이다.
useState는 컴포넌트 렌더링시 딱 1번만 생성이 된다.