>웹 프론트엔드 >JS 튜토리얼 >내 React useEffect Hook과 비동기 함수가 정리 경고를 발생시키는 이유는 무엇이며 어떻게 해결할 수 있나요?

내 React useEffect Hook과 비동기 함수가 정리 경고를 발생시키는 이유는 무엇이며 어떻게 해결할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-26 17:26:30926검색

Why Does My React useEffect Hook with Async Functions Throw a Cleanup Warning, and How Can I Fix It?

useEffect의 비동기 함수에 대한 React Hook 경고: 정리 함수 필요

React의 useEffect 후크 내에서 비동기 함수를 사용할 때 "useEffect 함수는 다음과 같은 경고가 나타날 수 있습니다. 정리 기능을 반환하거나 아무것도 반환하지 않습니다." 이 경고는 반환된 함수가 제대로 정리되지 않으면 메모리 누수가 발생할 가능성이 있기 때문에 발생합니다.

React 버전 18에서는 일반적으로 useEffect 내부에서 익명 함수를 사용하는 것이 좋습니다. 별도의 정리 기능이 필요하지 않습니다. 그러나 명확성이나 재사용성을 위해 명명된 함수를 사용하려는 경우 다음 두 가지 접근 방식을 활용할 수 있습니다.

  1. useEffect 외부에서 비동기 함수 이동:

    useEffect 외부에서 비동기 함수를 정의하고 직접 호출하세요. 이 접근 방식을 사용하면 useEffect 내에서 정리 기능이 필요하지 않습니다.

  2. useCallback 및 useEffect와 함께 콜백을 사용하세요.

    이름이 지정된 useEffect 내에서 함수를 함수화하고 종속성의 변경 사항도 관찰하려면 useCallback을 사용하여 함수를 래핑하고 다음으로 전달할 수 있습니다. useEffect를 종속성으로 사용합니다. 이렇게 하면 종속성이 변경되면 useEffect가 다시 실행되어 이전 함수 호출이 정리됩니다.

React 버전 18 이상의 경우 Suspense를 사용합니다. 기능 구성 요소 내에서 데이터를 가져오는 데 권장됩니다. Suspense를 사용하면 데이터를 사용할 수 있을 때까지 대체 UI를 제공하면서 비동기 작업을 처리할 수 있습니다. 이 접근 방식을 사용하면 정리 기능과 잠재적인 경쟁 조건이 모두 필요하지 않습니다.

다음은 Suspense를 사용하는 간단한 예입니다.

import React, { useState, Suspense } from 'react';

function App() {
  const [data, setData] = useState(null);

  const fetchData = async () => {
    const res = await fetch('api/data');
    const data = await res.json();
    setData(data);
  };

  return (
    <Suspense fallback={'Loading...'}>
      <div>{data ? JSON.stringify(data) : 'No data yet'}</div>
    </Suspense>
  );
}

위 내용은 내 React useEffect Hook과 비동기 함수가 정리 경고를 발생시키는 이유는 무엇이며 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.