State Lifting은
여러 컴포넌트가 동일한 데이터를 필요로 할 때,
그 데이터를 개별 컴포넌트가 아닌 공통 부모 컴포넌트에서 관리하도록 구조를 변경하는 설계 방식이다.
React는 단방향 데이터 흐름 구조를 가진다.
예를 들어:
이런 문제를 해결하는 방법이
바로 State Lifting이다.
State Lifting은 상태를 부모로 올려 props로 분배하는 구조 설계 패턴이다.
라이프사이클은
React 컴포넌트가 생성되고, 변경되고, 제거되는 전체 흐름을 의미한다.
컴포넌트는 항상
"태어나고 → 바뀌고 → 사라지는" 과정을 거친다.
이 흐름 전체를 라이프사이클이라고 부른다.
컴포넌트의 생성부터 제거까지의 생명 흐름
useEffect는
컴포넌트의 라이프사이클에 맞춰
사이드 이펙트를 실행하는 훅이다.
렌더링과 직접적인 관련이 없는 모든 작업:
useEffect로 리액트의 라이프사이클을 알아보자
// 1. 마운트 : 첫 렌더링, 탄생
useEffect(()=>{
console.log("mount")
},[])
새로고침을 눌렀을 때 즉, 처음 컴포넌트가 첫 렌더링이 됐을 때만 로그를 띄움
const isMount = useRef(false)
// 2. 업데이트 : 리렌더링, 변화
useEffect(()=>{
if(!isMount.current){
isMount.current = true;
return;
}
console.log("update")
})
useRef를 이용하여 처음 마운트됐을 때 로그를 부르지 않고, 이후 리렌더링 될떄마다 로그 띄움
의존성 배열이 없기 때문에 state,props, 부모 리렌더링 등 모든 리렌더링 상황마다 실행
import { useEffect } from "react"
const Even =()=>{
useEffect(()=>{
//useEffect에서 콜백함수가 반환하는 함수: 클린업 또는 정리 함수
return () => {
console.log("unmount")
};
},[])
return <div>짝수입니다</div>
}
export default Even
짝수가 아닐 경우 컴포넌트가 조건부 렌더링에서 제거되며 이때 cleanup 함수가 실행되며 로그를 띄움.
useEffect는 라이프사이클 기준으로 부수 작업을 관리하는 훅