React를 처음 배우면서 가장 많이 사용하게 되는 것이 바로 state다.
그런데 사용하다보니 한 가지 의문이 들었다.
모든 값을 state로 관리해야 할까?
처음에는 이렇게 생각했다.
그래서 이런 코드가 자연스럽게 나왔다.
const [name, setName] = useState("Kim");
const [age, setAge] = useState(20);
const [title, setTitle] = useState("Hello");
이해보다는 받아들여서 쓰기 시작하다보니
“모든 값을 state로 관리해야 하는 것인가?”
하는 궁금증이 생겼다.
찾아보다보니 기준을 하나 잡을 수 있었다.
👉 “이 값이 바뀔 때 화면(UI)이 다시 그려져야 하는가?”
이것에 대해 이해하기 위해 렌더링을 짚어보고 넘어가겠다.
React는 상태(state)가 변경되면 컴포넌트를 다시 실행하고 UI를 다시 그린다
state 변경 → 컴포넌트 함수 재실행 → UI 업데이트
즉, state는 단순한 값이 아니라 렌더링을 발생시키는 기준이다
const title = "Hello";
👉 특징:
const [count, setCount] = useState(0);
👉 특징:
👉 렌더링을 발생시키지 않는 값은 state가 아니다
state가 바뀌면 컴포넌트가 다시 렌더링된다.
👉 필요 없는 값까지 state로 만들면 성능에 영향을 줄 수 있다.
👉 어떤 값이 중요한 상태인지 헷갈림
처음에는 이렇게 생각했다.
“state는 그냥 값 저장하는 도구다”
하지만 지금은 이렇게 이해하고 있다.
👉 state는 “UI를 바꾸기 위한 상태”다
React는 단순히 값을 저장하는 방식이 아니라
👉 “상태 변화에 따라 UI를 다시 그리는 구조”였다
그래서 중요한 건
이었다.
모든 값이 state일 필요는 없다
렌더링이 필요한 값만 state로 관리하자
이전에 TodoList를 구현해보면서 state가 언제 필요한지 더 명확하게 이해할 수 있었다.
const [todos, setTodos] = useState([]);
function handleAddTodo(title) {
const newTodo = {
id: Date.now(),
title,
completed: false,
};
setTodos([...todos, newTodo]);
}
할 일을 추가하면 todos 상태가 변경되고 UI도 함께 업데이트된다.
이 경우 state가 반드시 필요하다
function handleToggleTodo(id) {
const updated = todos.map((todo) =>
todo.id === id
? { ...todo, completed: !todo.completed }
: todo
);
setTodos(updated);
}
completed 값이 바뀌면서 UI에서 할일/완료 목록이 이동한다.
state 변화 → UI 변화가 연결되는 구조였다
👉 결국 중요한 것은 state를 사용하는 것이 아니라 언제 사용해야 하는지를 아는 것이었다