- Published On
React hooks - useState
useState
는 React의 기본적인 상태 관리 훅
중 하나입니다.
컴포넌트 내부에서 상태
를 관리할 수 있도록 해주며, 상태가 변할 때마다 컴포넌트가 리렌더링
됩니다.
이 글에서는 useState
의 사용 방법, 동작 원리, 그리고 주의사항에 대해 자세히 알아보겠습니다.
useState
의 정의와 기본 문법
useState
는 함수 컴포넌트에서 상태를 선언
하고 관리
하기 위해 사용됩니다.
const [state, setState] = useState < Type > initialState;
- useState는 초기 상태를 설정하고, 이를 관리하는 함수를 반환합니다.
- 타입을 명시하면, 상태 업데이트 시 타입이 일관성을 유지합니다.
useState의 기본 사용법
import React, { useState } from "react";
function Counter() {
const [count, setCount] = useState < number > 0;
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>증가</button>
<button onClick={() => setCount(count - 1)}>감소</button>
</div>
);
}
export default Counter;
- useState(0)을 사용하여 초기 상태값을 0으로 설정합니다.
- 상태를 변경할 때는 setCount 함수를 호출합니다.
- 상태가 변경되면 컴포넌트가 자동으로 리렌더링됩니다.
useState의 동작 원리
독립적인 상태 관리
: 각 컴포넌트 인스턴스는 자신의 상태를 독립적으로 유지합니다.배치 업데이트
: React는 여러 상태 변경을 모아 한 번에 처리해 성능을 최적화합니다.리렌더링 트리거
: 상태가 변경되면 해당 컴포넌트가 자동으로 리렌더링됩니다.
useState에 함수형 업데이트
const [count, setCount] = useState(0);
const increment = () => {
setCount((prevCount) => prevCount + 1);
};
만약 상태 업데이트가 이전 상태에 의존한다면, 함수형 업데이트를 사용하는 것이 좋습니다.
상태 업데이트 함수에 콜백 함수를 전달하면, 이 함수의 인자로 이전 상태 값이 전달됩니다.
이를 통해 상태 변경이 비동기적으로 처리될 때 이전 상태를 안전하게 참조할 수 있습니다.
초기 상태를 함수로 설정
const [state, setState] = useState(() => {
const initialState = computeExpensiveValue();
return initialState;
});
만약, 초기 상태를 계산하는데 비용이 큰 경우, 함수를 사용하여 초기 상태를 설정할 수 있습니다.
초기화 함수는 컴포넌트가 처음 렌더링될 때 한 번만 호출됩니다.
이를 통해 불필요한 초기화 작업을 피할 수 있습니다.
상태 업데이트 주의사항
만약 상태를 객체
로 관리할 때는 상태를 변경할 때마다 기존 상태를 복사해야 합니다.
직접 변경하면 불변성(immutability)
을 위반할 수 있습니다.
배열 상태를 업데이트할 때도 불변성을 유지해야 합니다.
// 상태를 객체로 받음
const [user, setUser] = useState({ name: "Alice", age: 25 });
const updateUserName = () => {
setUser((prevUser) => ({ ...prevUser, name: "Bob" }));
};
// 상태를 배열로 받음
const [items, setItems] = useState([1, 2, 3]);
const addItem = (newItem) => {
setItems((prevItems) => [...prevItems, newItem]);
};
정리
useState는 React에서 가장 기본적인 상태 관리 훅으로, 컴포넌트 내부에서 간단하게 상태를 관리할 수 있게 도와줍니다.
상태가 복잡해지거나 여러 단계의 로직이 필요한 경우에는 useReducer와 같은 다른 훅의 사용을 고려해야 합니다.
이전 포스트
React hooks - useEffect다음 포스트
Next.js의 렌더링 과정연관된 포스트 구경가기
1. React 란?2. Redux3. Virtual DOM(가상 DOM)이란?4. React hook 이란?5. Debounce와 Throttle의 차이점 및 활용법6. 클로저와 렉시컬 스코프7. React hooks - useEffect8. React hooks - useState9. React hooks - useRef
간략히