Post

React State

React State

상태 state

  • 각 컴포넌트 내에서 독립적으로 관리되는 데이터
  • 사용자 상호작용에 의해 변경될 수 있는 데이터
  • 리액트는 상태가 변경되면 컴포넌트를 리렌더링 (화면을 다시 그린다)
  • 상태는 화면을 결정하는 중요한 데이터

상태는 컴포넌트마다 독립적으로 관리되는 데이터로 변수와는 다른 리액트의 데이터 관리 수단

변수와 상태의 차이점은 데이터가 변경될 때 리액트의 동작 유/무 입니다.

userState Hook

  • Hook 훅 : 리액트에서 특정한 동작을 수행하는 도구, 함수와는 다른 개념이다
  • 상태를 저장하는변수상태 설정함수를 생성하는 상태 관리 도구

기본 구조

1
2
3
4
import { useState } from "react";
function ComponentName() {
  const [something, setSomething] = useState(initialValue);
}

문자열 상태 업데이트

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
import { useState } from "react";

export default function StringState() {
  // 초기 값이 문자열 ""인 상태를 생성한다
  const [stringState, setStringState] = useState("");

  function updateStringState() {
    // 상태는 직접 수정할 수 없다
    // ❎ stringState = "추가"

    // 새로운 문자열을 생성해서 상태를 변경
    let newString = `${stringState} 추가`;
    setStringState(newString);
  }

  return (
    <div>
      <p>{stringState}</p>
      <button
        onClick={() => {
          updateStringState();
        }}
      >
        문자열 추가
      </button>
    </div>
  );
}

숫자 상태 업데이트

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
import { useState } from "react";

export default function NumberState() {
  // 초기 값이 숫자 0인 상태를 생성한다
  const [numberState, setNumberState] = useState(0);

  function updateNumberState() {
    // 상태는 직접 수정할 수 없다
    // ❎ numberState = numberState + 1;

    // 새로운 숫자형 데이터를 생성해서 상태를 변경
    let newNumber = numberState + 1;
    setNumberState(newNumber);
  }

  return (
    <div>
      <p>{numberState}</p>
      <button
        onClick={() => {
          updateNumberState();
        }}
      >
        카운트 증가
      </button>
    </div>
  );
}

객체 상태 수정

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
31
32
33
import { useState } from "react";

export default function ObjectState() {
  const [objectState, setObjectState] = useState({
    age: 19,
    name: "홍길동",
  });

  function updateObjectState() {
    // ... 연산자로 새로운 객체를 생성해서 변경
    // 수정할 속성만 새로운 값으로 변경
    let newObjectState = {
      ...objectState,
      age: objectState.age + 1,
    };

    setObjectState(newObjectState);
  }

  return (
    <div>
      <p>이름 : {objectState.name}</p>
      <p>나이 : {objectState.age}</p>
      <button
        onClick={() => {
          updateObjectState();
        }}
      >
        나이 증가
      </button>
    </div>
  );
}
This post is licensed under CC BY 4.0 by the author.