Front end/React

React Hook 정리 (useState, useEffect)

re-hwi 2025. 1. 21. 16:31

훅(hook) 이란?

리액트 16.8버전부터 새로 도입된 개념이다. hook은 class 를 사용하지 않고도 리액트의 기능을 사용할 수 있게 도와준다.

기존 리액트의 컴포넌트는 클래스를 이용해 상태 관리를 했었지만 훅이 도입된 이후 보다 간편하게 상태 관리를 할 수 있게 되었다.

 

기존 리액트의 상태관리

class Counter extends Component {
  // 상태 초기화
  state = {
    count: 0,
  };

  // 버튼 클릭 시 호출되는 핸들러 메서드
   handleClick= () => {
    this.setState({ count: this.state.count + 1 }); // 상태 업데이트
  };

  render() {
    return (
      <div>
        <p>현재 카운트: {this.state.count}</p>
        <button onClick={this.handleClick}>증가</button>
      </div>
    );
  }
}

export default Counter;

훅을 통한 상태관리

function Counter() {
  const [count, setCount] = useState(0); // 상태 관리

  return (
    <div>
      <p>현재 카운트: {count}</p>
      <button onClick={() => setCount(count + 1)}>증가</button>
    </div>
  );
}

export default Counter;

useState 라는 훅을 이용해 복잡한 코드를 줄였고 상태 로직을 재활용하기 쉽게 만들었다.

useState

 const [state, setState] = useState(initialState)

Reate 훅의 종류중 하나. 상태를 관리해 주는 역할을 한다.

사용법은 다음과 같다.

  const [변수, 변수를 바꿀 수 있는 함수] = useState(초기값);
  
  // 예시
  const [count, setCount] = useState(0);

첫 번째 자리에는 상태변수가 들어간다. 해당 변수는 다음에 들어갈 함수로 접근이 가능하다.

예시로 제공된 코드를 읽어보면 count라는 변수를 0으로 초기화 한다. count를 변경하기 위해서는 setCount 라는 함수를 이용해 접근한다.

이 때 setCount는 setter 역할을 하며 setCount를 사용하지 않고 count를 변경한다면 리렌더링이 되지 않는다.

이는 리액트의 상태변경은 예측 가능해야한다. 라는 상태 관리 원칙에 따라 함수를 순수하게 유지시키기 위함이다.

useEffect

useEffect(setup**,** dependencies?)

useEffect는 외부 시스템과 컴포넌트를 동기화 하는 React Hook이다.

  useEffect(() => {
    const connection = createConnection(serverUrl, roomId);
    connection.connect();      // 설정함수 (시작하자마자 또는 dependencies가 변경되었을 때 실행)
    return () => {
      connection.disconnect(); // 정리함수 (사라질 때 또는 dependencies가 변경되기 직전에 실행)
    };
  }, [serverUrl, roomId]);

매개변수

setup: Effect의 로직이 포함된 함수이다. 의존성 (위 코드에서는 serverUrl, roomId) 이 변화하면 실행된다.

설정 함수는 선택적으로 clean up(정리) 함수를 반환할 수 있다.

의존성의 변화에 따라 컴포넌트가 리렌더링 되었을 때 이전 렌더링에 사용된 값으로 정리 함수를 실행한 후 새로운 값으로 설정 함수를 실행한다.

컴포넌트가 DOM에서 제거 되었을 때에도 정리함수를 실행한다.

 

 

반응형