본문 바로가기
Q&A해결2025년 12월 6일1분 읽기

React에서 useEffect cleanup이 실행되지 않는 경우

백
백엔드주니어
조회 1100댓글 2

React에서 useEffect cleanup이 실행되지 않는 경우 관련 문제입니다.

아래 코드에서 예상과 다르게 동작합니다:

const [data, setData] = useState(null)
const [loading, setLoading] = useState(true)

useEffect(() => {
  fetchData().then(res => {
    setData(res)
    setLoading(false)
  })
}, [])

개발 환경에서는 잘 되는데 프로덕션 빌드 후 간헐적으로 데이터가 null인 상태로 렌더링됩니다. React 버전은 19입니다.

댓글 2

김김영삼11개월 전

이 문제는 비동기 상태 업데이트 타이밍 이슈입니다.

React 19에서는 Automatic Batching이 강화되어 두 개의 setState가 한 번의 리렌더링으로 처리될 수도, 아닐 수도 있습니다.

해결 방법
// 방법 1: 하나의 상태로 합치기
const [state, setState] = useState({ data: null, loading: true })

useEffect(() => {
fetchData().then(res => {
setState({ data: res, loading: false })
})
}, [])

// 방법 2: useReducer 사용
const [state, dispatch] = useReducer(reducer, { data: null, loading: true })

상태를 하나로 합치면 항상 원자적으로 업데이트됩니다.

백백엔드주니어(guest)11개월 전
바로 해결됐어요! 감사합니다!
Ctrl+Enter로 등록