Frontend Study
React _ Clean up 처리
jimmmy_jin
2025. 1. 3. 15:55
React useEffect에서 else 없이 클린업 처리하기
useEffect를 사용할 때, 상태에 따라 작업을 처리하면서 **클린업(cleanup)**을 수행하는 것은 매우 중요하다. 특히, 아래 코드처럼 else를 사용하지 않고 클린업을 처리하는 방식은 React에서 권장되는 패턴이다.
useEffect(() => {
const modal = dialog.current;
if (open) {
modal.showModal(); // 상태가 true일 때 다이얼로그 열기
}
return () => modal.close(); // 상태 변경 또는 언마운트 시 다이얼로그 닫기
}, [open]);
왜 else를 사용하지 않을까?
- React의 클린업 메커니즘과 호환
- useEffect는 상태 변경이나 컴포넌트 언마운트 시 클린업 함수를 호출한다.
- return을 통해 클린업 로직을 항상 처리하므로, else가 불필요하다.
- 코드의 간결성과 안전성
- else를 추가하면 로직이 복잡해지고, 클린업이 누락될 가능성이 있다.
- return을 사용하면 상태와 관계없이 클린업이 항상 호출된다.
- React 권장 패턴 준수
- 클린업은 상태 변경과 언마운트 상황 모두에서 작동해야 하므로, return을 통한 처리가 React의 권장 방식이다.
else를 사용할 경우의 문제점
useEffect(() => {
const modal = dialog.current;
if (open) {
modal.showModal();
} else {
modal.close(); // 언마운트 시에는 호출되지 않을 수 있음
}
}, [open]);
- 상태 변경은 처리할 수 있지만, 컴포넌트 언마운트 시에는 else 조건이 작동하지 않는다.
- 클린업이 보장되지 않아 예기치 않은 동작이 발생할 수 있다.
결론
React에서 useEffect와 클린업을 사용할 때는 return으로 클린업을 처리하는 것이 가장 안전하고 간결한 방법이다. 이렇게 하면 상태 변경과 언마운트 상황에서 항상 클린업이 실행되며, 코드의 유지보수성이 향상된다. 😊
추천 패턴:
useEffect(() => {
if (open) {
dialog.current.showModal();
}
return () => dialog.current.close();
}, [open]);