useState는 React의 상태(state) 관리 함수로, 컴포넌트의 상태를 저장하고 변경할 수 있도록 도와주는 React Hook임.
useState 의 기본 사용법import { useState } from "react";
const Counter = () => {
// count 상태를 선언하고, 초기값을 0으로 설정
const [count, setCount] = useState(0);
return (
<div>
<p>현재 카운트: {count}</p>
<button onClick={() => setCount(count + 1)}>+1 증가</button>
</div>
);
};
export default Counter;
useState(0) 을 이용해서 count 상태 변수를 만들고, 초기값을 0으로 설정함setCount 함수를 이용해 count 값을 변경할 수 있음setCount(count+1) 이 실행되어 숫자가 1씩 증가함useState 상세 설명1️⃣ useState 의 기본 형태
const [state, setState] = useState(intialValue);
state: 현재 상태 값을 저장하는 변수setState: 상태를 변경하는 함수initialValue: 상태의 초기값예제 살펴보기
const [name, setName] = useState("Wonbin");
setName("Park"); // 상태 변경 -> 화면 다시 렌더링 됨
const [isVisible, setIsVisible] = useState(false);
setIsVisible(true); // 상태 변경
2️⃣ useState 에서 객체 사용하기
const [user, setUser] = useState({ name: "Wonbin", age: 24});
const updateAge = () => {
setUser({...user, age:user.age + 1}); // 기존 객체 복사 후 age만 변경
}
주의할 점
setUser(user.age = 23);과 같은 형식으로는 해선 안됨!
React는 상태가 직접 변경되면 변경을 감지하지 못하므로 반드시setState를 사용해주어야 함!
3️⃣ useState에서 배열 사용하기
const [items, setItems] = useState(["사과", "바나나"]);
const addItem = () => {
setItems([...items, "포도"]); // 기존 배열을 복사힌 후 새로운 값 추가
}
=> 배열을 업데이트할 때는 기존 배열을 복사하고 새 값을 추가해야 함.
(React는 기존 상태와 새로운 상태를 비교하여 변경된 부분만 렌더링하기 때문임)
useState에서 상태 변경하는 방법setCount(5); // count 값을 5로 변경
setCount(prevCount => prevCount + 1);
setCount(prev => prev + 1);
setCount(prev => prev + 1);
setCount(prev => prev + 1);
=> 이렇게 하면 count값이 3씩 증가하게 됨
useState 사용 시 주의할 점const [user, setUser] = useState({ name: "Wonbin", age: 24 });
user.age = 24; // 다음과 같은 방식 ❌
=> 이렇게 하면 React가 변경을 하지 못해서 화면이 업데이트 되지 않음.
✅ 올바른 방법:
setUser({...user, age: 23 });
console.log(count);
setCount(count + 1);
console.log(count); // 여전히 이전 값이 출력됨
=> 상태가 바로 업데이트 되는 것이 아니라 비동기적으로 처리되므로 setCount 후 바로 console.log(count)를 하면 이전 값이 출력될 수 있음.
✅ 올바른 방법:
useEffect(() => {
console.log("count 값이 변경됨:", count);
}, [count]); // count 값이 변경될 때 실행됨
=> 상태 변경 후 실행되는 효과를 보고 싶다면 useEffect 사용
useState 실전 예제1️⃣ 입력값을 관리하는 상태
const InputBox = () => {
const [text, setText] = useState("");
return (
<div>
<input
type="text"
value={text}
onChange={(e) => setText(e.target.value)}
/>
<p>입력한 값: {text}</p>
</div>
);
};
=> 사용자가 입력한 값을 text 상태에 저장하고 화면에 반영
2️⃣ 배열에서 데이터 추가하기
import { useState } from "react";
const TodoList = () => {
const [todos, setTodos] = useState(["공부하기", "운동하기"]);
const addTodo = () => {
setTodos([...todos, "새로운 할 일"]); // 기존 배열 복사 후 새로운 값 추가
};
return (
<div>
<ul>
{todos.map((todo, index) => (
<li key={index}>{todo}</li>
))}
</ul>
<button onClick={addTodo}>할 일 추가</button>
</div>
);
};
=> setTodos([...todos, "새로운 할 일"])을 사용하여 기존 배열을 유지하면서 새로운 항목을 추가
‼️ useState 정리
useState: React의 상태 관리 Hook- 사용 방법:
const [state, setState] = useState(초기값)- 상태 변경:
setState(새로운 값)- 이전 값 기반 업데이트:
setState(prev => prev + 1)- 객체 업데이트:
setState({...state, 변경할 값})- 배열 업데이트:
setState([...state, 새로운 값])
✔️ useState는 React에서 가장 기본적이면서 중요한 Hook!
✔️ 상태를 직접 변경하지 말고 항상 setState를 사용해야 함
✔️ 상태 변경은 비동기적으로 처리됨을 항상 기억!