setTimeout으로 컴포넌트 마운트 해제시 타이머 삭제하는 예시

const Timer = () = {
	useEffect(() => {
		const timerId = setTimeout(() => {
			console.log("time is up")
		}, 1000);
		return () => {
			clearTimeout(timerId)
		};
	}, [])
	retrun <div>Hello timer</div>;
}

예시와 같은 정리 함수로 메모리 누수 방지

useEffect(() => {
	const controller = new AbortController();
	const signal = controller.signal;
	const fetchArticleDetail = async (id: string) => {
		fetch(`/api/articles/${id}`, { signal })
			.then((res) => res.json())
			.then((data) => setArticle(data));
	};
	
	fetchArticleDetail(id);
	
	return () -> {
		controller.abort();
	};
}, [id]);

컴포넌트 마운트 시 AbortController인스턴스 생성하고 signal 참조 signal은 fetch 함수에 전달되고 컨트롤러 요청과 연결

만약 네트워크 요청 완료 이전에 컴포넌트 언마운트 시 abort 메서드로 수행중인 네트워크 요청 취소하는 정리 함수 호출

언마운트된 컴포넌트의 상태를 업데이트 하는 등의 잠재적인 이슈 방지