logo

Post

useEffect와 비동기

게시글 대표 이미지

발단

useEffect 훅 안에서 async await 키워드를 통해서 비동기 데이터 로딩을 시도하자 다음과 같은 경고 메시지가 떴다.

useEffect(async () => {
      const response = await MyAPI.getData(someId);
      fetchData();
}, [someId]);

원인

친절하게도 이미 경고 메세지에서는 원인과 해결 방안을 알려주고 있다.

Effect callbacks are synchronous to prevent race conditions. Put the async function inside.

Effect 콜백함수는 경쟁 상태(race condition, 동시에 작동하는 둘 이상의 프로세스가 하나의 리소스에 접근하기 위해 경쟁하는 상태)를 방지하기 위해 동기적(synchronous)이다. 비동기 함수를 안으로 넣어라.

해결

useEffect 훅에서 async 함수를 사용하는 한 가지 방법은 부수 효과 함수 내에서 async 함수를 만들어서 호출하는 것이다.

useEffect(() => {
    async function fetchData() {
        const response = await MyAPI.getData(someId);
        // ...
    }

    fetchData();
}, [someId]); 
다른 글 읽기
이전 글
  • Cover Image for 구조 분해 할당 이슈(feat. 원시값과 참조값)
      구조 분해 할당 이슈(feat. 원시값과 참조값)

      너 이러케 드러가야 되는 거야 이마. 이러케, 이러케. 핫! 챠! 이거, 그냥 드러가면 얼마나 좋겠는데. 그냥 들어가, 이마! 이러케, 이러케 드러가! 개 같은 경우. 왜! 왜! 왜!

    • 다음 글
    • Cover Image for useMemo와 useCallback
        useMemo와 useCallback

        단지 익숙하지 않은 기술을 배우지 않으려고 하는 나의 좁은 마음때문에 Hook 사용을 미뤄왔다.