리액트

useState

도야지밍 2023. 1. 4. 21:14

컴포넌트에서 보여줘야 하는 내용이 사용자의 인터랙션에 따라 바뀌어야 할 때 동적으로 어떻게 구현할 수 있는지 알아보자.

 

State란?

먼저 State란 컴포넌트가 가질 수 있는 상태를 말한다. 

❗️ 여기서 상태란 컴포넌트에서 동적인 값을 말한다.

예를 들어, 시간이라는 컴포넌트가 있다면 state로 현재 시간을 가질 수 있다.

 


사용법

react Hooks의 useState라는 함수는 컴포넌트의 state를 간편하게 생성하고 업데이트를 시킬 수 있게 해주는 도구를 제공한다.

즉, 컴포넌트에서 상태를 관리 할 수 있다는 이야기이다.

useState를 사용하기 위해서는 react에서 useState를 import 받아야한다.

이 코드는 리액트 패키지에서 useState라는 함수를 불러와주는 역할을 한다.
import { useState } from 'react';

 

그 후, 변수 선언을 해주어야 하는데 아래처럼 state의 생성과 동시에 가져야 할 초기값(기본값)을  useState함수의 매개변수로 넣어 주고 호출해주면 state와 setState라는 두 가지 요소를 배열 형태로 리턴해준다. 여기서 첫번째 원소는 현재 상태, 두번째 원소는 Setter 함수이다.

state명은 알맞게 설정하면 되고 두번째 요소에 set을 붙여주면 된다.

const [state, setState] = useState(초기값);

Setter 함수는 파라미터로 전달 받은 값을 최신 상태로 설정해준다.

 


state의 값을 변경하고 싶다면?

setState 함수를 불러서 인자에는 변경될 값을 넣어주면 된다.

// state의 값을 2로 변경
setState(2);

setState 함수를 이용해서 state의 값을 변경하면 해당 컴포넌트는 화면에 다시 렌더링 되어서 state가 변경될 때마다 화면이 업데이트된다.  예를 들어, state가 시간이라고 한다면 시간이 변경 될 때마다 화면이 렌더링 된다고 생각하면 된다.

 

Setter 함수를 사용할 때 , 위와 같이 새로운 값을 파라미터로 넣어주는 방법도 있지만

기존 값을 어떻게 업데이트 할 지에 대한 함수를 등록하는 방법으로도 값을 업데이트 할 수 있다. 

 

새로운 값을 파라미터로 넣어주는 예시
import React, { useState } from 'react';

function Counter() {
  const [number, setNumber] = useState(0);

  const onIncrease = () => {
    setNumber(number + 1);
  }

  const onDecrease = () => {
    setNumber(number - 1);
  }

  return (
    <div>
      <h1>{number}</h1>
      <button onClick={onIncrease}>+1</button>
      <button onClick={onDecrease}>-1</button>
    </div>
  );
}

export default Counter;

 

함수로 업데이트 하는 예시
import React, { useState } from 'react';

function Counter() {
  const [number, setNumber] = useState(0);

  const onIncrease = () => {
    setNumber(prevNumber => prevNumber + 1);
  }

  const onDecrease = () => {
    setNumber(prevNumber => prevNumber - 1);
  }

  return (
    <div>
      <h1>{number}</h1>
      <button onClick={onIncrease}>+1</button>
      <button onClick={onDecrease}>-1</button>
    </div>
  );
}

export default Counter;