React를 사용하다 보면 컴포넌트 간에 같은 데이터를 공유해야 할 때가 있다. 이럴 때 사용하는 패턴이 바로 상태 끌어올리기(state lifting)다. 이 글에서는 상태 끌어올리기의 개념부터 예제, 사용하는 이유까지 단계별로 정리해본다.
여러 컴포넌트가 같은 상태를 공유해야 할 때, 해당 상태를 공통 부모 컴포넌트로 올리는 것을 상태 끌어올리기라고 한다.
React는 데이터가 항상 위에서 아래(부모 → 자식) 방향으로 흐르기 때문에, 형제 컴포넌트끼리 데이터를 공유하려면 부모 컴포넌트를 통해야 한다.
형제 컴포넌트가 서로 다른 상태를 가지면 데이터가 불일치할 수 있다. 이 경우 공통 부모가 상태를 관리하고 자식에게 props로 내려주는 방식이 가장 깔끔하다.
예를 들어, 두 개의 입력창이 있고 한쪽에서 입력한 값이 다른 쪽에도 반영되어야 할 경우를 보자.
function FirstInput() {
const [text, setText] = useState("");
return <input value={text} onChange={(e) => setText(e.target.value)} />;
}
function SecondInput() {
const [text, setText] = useState("");
return <input value={text} onChange={(e) => setText(e.target.value)} />;
}
각 입력창이 독립적인 상태를 갖고 있어서 서로 영향을 주지 않는다. 즉, 한쪽 입력값이 다른 쪽에 반영되지 않는다.
function Parent() {
const [text, setText] = useState("");
return (
<>
<FirstInput text={text} setText={setText} />
<SecondInput text={text} setText={setText} />
</>
);
}
function FirstInput({ text, setText }) {
return <input value={text} onChange={(e) => setText(e.target.value)} />;
}
function SecondInput({ text, setText }) {
return <input value={text} onChange={(e) => setText(e.target.value)} />;
}
이제 하나의 입력창에서 입력하면 다른 입력창에도 동일하게 반영된다. 상태는 공통 부모인 Parent가 가지고 있고, 자식은 props를 통해 상태를 전달받는다.
항목 | 설명 |
상태 끌어올리기 | 자식들이 공유할 상태를 부모 컴포넌트로 이동시키는 기법 |
목적 | 컴포넌트 간 상태 동기화 |
방법 | 부모에서 상태를 관리하고, 자식은 props로 전달받아 사용 |
상태 끌어올리기는 React의 데이터 흐름 제어의 핵심이다. 더 복잡한 상태 관리가 필요하다면 Context API나 Redux 같은 도구로 확장하면 된다.
React - useEffect를 이용한 컴포넌트 라이프사이클 제어 정리 (1) | 2025.06.05 |
---|---|
♻️ 리액트 컴포넌트 생명 주기(Lifecycle) 핵심 정리 (0) | 2025.06.03 |
React - Hook 사용 규칙과 Custom Hook 예제 (0) | 2025.06.01 |
React - Hooks (1) | 2025.06.01 |
React - useRef (0) | 2025.06.01 |