React 사용시 useEffect 훅에 async 함수를 넘겨서 다음과 같은 에러를 겪은적이 한두번씩 있을것 이라고 생각합니다.
useEffect 의 콜백 함수 인자는, 콜백함수 자기 자신과 return 되는 클로저 함수를 통해 동작 하는 함수입니다. 이 클로저 함수는 clean-up 기능을 담당합니다.
하지만 async 함수는 Promise 객체를 리턴 하는 함수입니다. 따라서 내부에 clean-up 함수가 포함되어 있더라도, useEffect 가 전달받은것은 그저 Promise 객체이기 때문에, useEffect 훅에서 cleanUp 함수를 전달받을수가 없게됩니다.
function useEffect (cleanUp, deps) {
...
if (typeof cleanUp === 'function' && ***) {
cleanUp();
}
}
정확히 위와 같이 구현된것은 아니겠지만, 개념적으로 접근해보자면, 위와 같은 코드로 동작할것입니다.
따라서, callback() 함수자체는 실행되어 내부에서 무엇인가 side effect 를 일으켯지만, clean-up 함수는 promise 를 전달받아 실행되지 못하고 이는 메모리 누수를 초래하게 될수 있습니다.
정리 하자면, 콘솔에서 알려주는 내용처럼 effect function 은 아무것도 반환하지 않거나 clean-up 을 위한 함수만 반환해야하는데 promise 객체가 반환되어 clean-up 을 실행할수 없기 때문에 에러를 발생시키는 것 입니다.
'Front-End' 카테고리의 다른 글
Vite 가 Webpack 보다 빠르다고 느끼는 이유는 무엇일까 (0) | 2023.08.14 |
---|---|
모듈 번들러를 사용하는 이유 (0) | 2023.08.13 |
모노레포를 통한 개발자 경험 향상하기 ( with Pnpm Workspace ) (0) | 2023.07.20 |
Web Core Vital 지표를 통해 FCP, LCP, CLS 개선하기 (0) | 2023.04.25 |
React 에서 Naver Maps API 를 사용할때 초기 페이지 로드 속도 최적화하기 (0) | 2023.04.23 |