CS지식/개발 상식

프론트엔드의 상태 관리

레이커 2023. 5. 17. 12:59

프론트엔드에서 "상태" 란

- 사용자와의 인터랙션을 통해 동적으로 계속해서 변화하는 데이터
- 상태들은 일관적이어야한다.
- 서로 다른 여러개의 컴포넌트들이 어떤 동일한 상태를 다루면, 그 데이터의 정확성을 보장하기 위해 데이터의 변경을 제한해 데이터의 상태를 항상 같게 유지해야한다


상태관리는 왜 필요한가?

- 서로 다른 두 컴포넌트에 같은 데이터가 필요하다고 할 때, 각 컴포넌트가 부모자식 관계로 되어있지 않은 이상, 각 컴포넌트 간의 직접적인 데이터 전달은 어렵다.

- 데이터를 부모 컴포넌트로 보내고, 다시 그 상데이터 필요한 컴포넌트로 전달해야한다. 하지만 이렇게 Prop Drilling이 많아지면 이 prop이 어디에서 왔는지 확인하기 정말 어려워진다. 
- 이때 사용하는 상태관리 툴이 Context API, Redux, React Query, MobX

 

React 에서 "상태"

- React에서 "상태"는 컴포넌트의 데이터를 나타내는 것을 의미한다.

- 컴포넌트의 상태는 해당 컴포넌트가 렌더링되는 동안 변할 수 있는 값입니다. 상태는 컴포넌트 내부에서 관리되며, 컴포넌트를 업데이트하거나 다시 렌더링할 때 사용됩니다.

- React에서 상태는 클래스 컴포넌트와 함수형 컴포넌트에서 모두 관리할 수 있습니다.

 

클래스 컴포넌트에서는 state 객체를 사용하여 상태를 관리

함수형 컴포넌트에서는 React의 useState 훅을 사용하여 상태를 관리

 

 

클래스 컴포넌트의 상태 예시:

 

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  render() {
    return (
      <div>
        <p>Count: {this.state.count}</p>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Increment
        </button>
      </div>
    );
  }
}

 

 

함수형 컴포넌트의 상태 예시:

import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

이 예시에서 count는 컴포넌트의 상태를 나타내며, 버튼을 클릭할 때마다 상태가 업데이트되고, 해당 변경 사항이 UI에 반영됩니다. 상태는 컴포넌트 내에서 필요한 데이터를 저장하고 관리하는 데 사용되며, 필요에 따라 컴포넌트의 다른 부분에서 상태를 사용할 수 있습니다.