> 웹 프론트엔드 > 프런트엔드 Q&A > useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까?

useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까?

百草
풀어 주다: 2025-03-19 15:58:28
원래의
469명이 탐색했습니다.

useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까?

useEffect 는 기능 구성 요소의 부작용을 처리하는 데 사용되는 React의 후크입니다. 부작용은 데이터 페치, 구독 설정 또는 DOM을 수동으로 변경하는 등 구성 요소 범위를 벗어난 작업에 영향을 미치는 작업입니다. useEffect 사용하면 렌더링 후 이러한 부작용을 실행할 수 있으며, 구성 요소를 외부 시스템과 동기화하는 데 사용할 수 있습니다.

useEffect 사용하려면 일반적으로 부작용 코드가 포함 된 함수를 전달합니다. 이 함수는 기본적으로 모든 렌더링 후에 호출되지만 종속성 배열을 useEffect 위한 두 번째 인수로 전달하여 호출 할 때 제어 할 수 있습니다.

다음은 useEffect 사용하는 방법의 기본 예입니다.

 <code class="javascript">import React, { useEffect, useState } from 'react'; function MyComponent() { const [data, setData] = useState([]); useEffect(() => { // This is the side effect fetch('/api/data') .then(response => response.json()) .then(data => setData(data)); }, []); // Empty dependency array means this effect runs once on mount return ( <div> {data.map(item => ( <div key="{item.id}">{item.name}</div> ))} </div> ); }</code>
로그인 후 복사

이 예에서는 useEffect 구성 요소가 마운트시 API의 데이터를 가져 오는 데 사용됩니다. 빈 종속성 배열 [] 은 초기 렌더에서 효과가 한 번만 실행되도록합니다.

React 구성 요소에서 언제 useeffect를 사용해야합니까?

구성 요소 자체의 렌더링과 직접 관련이없는 작업을 수행 해야하는 경우 React 구성 요소에서 useEffect 사용해야합니다. 이러한 작업에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • API에서 데이터 가져 오기
  • 구독 또는 이벤트 리스너 설정
  • DOM을 수동으로 조작합니다
  • 이벤트 또는 타이머로부터 구독 취소와 같은 자원 청소

useEffect 구성 요소의 초기 렌더링 후 또는 특정 상태 변경에 응답하여 이러한 작업을 실행하는 데 특히 유용합니다. 종속성 배열을 useEffect 위한 두 번째 인수로 전달하여 효과가 실행되는시기를 지정할 수 있습니다. 예를 들어:

  • 초기 렌더 후 한 번만 효과를 실행하려면 빈 배열을 전달하십시오 [] .
  • 특정 상태 또는 PROP가 변경 될 때마다 효과를 실행하려면 종속성 배열에 이러한 변수를 포함시킵니다.

useeffect로 관리 할 수있는 일반적인 부작용은 무엇입니까?

useEffect 로 관리 할 수있는 일반적인 부작용은 다음과 같습니다.

  1. 데이터 가져 오기 : useEffect 사용하여 구성 요소가 장착되거나 특정 소품 또는 상태 변경시 API 또는 데이터베이스에서 데이터를 가져올 수 있습니다. 이를 통해 구성 요소의 데이터가 최신 상태인지 확인합니다.

     <code class="javascript">useEffect(() => { fetchData(); }, [someDependency]);</code>
    로그인 후 복사
  2. 구독 설정 : 컴포넌트가 외부 데이터 소스의 변경에 반응 해야하는 경우 useEffect 사용하여 구독을 설정할 수 있습니다.

     <code class="javascript">useEffect(() => { const subscription = someExternalDataSource.subscribe(handleChange); return () => subscription.unsubscribe(); }, []);</code>
    로그인 후 복사
  3. DOM을 수동으로 변경 : 때로는 입력 필드에 초점을 맞추려면 DOM과 직접 상호 작용해야 할 수도 있습니다.

     <code class="javascript">useEffect(() => { inputRef.current.focus(); }, []);</code>
    로그인 후 복사
  4. 타이머 : setTimeout 또는 setInterval 과 같은 타이머를 설정 및 useEffect 수 있습니다.

     <code class="javascript">useEffect(() => { const timer = setTimeout(someFunction, 1000); return () => clearTimeout(timer); }, []);</code>
    로그인 후 복사

사용률로 적절한 정리를 어떻게 보장 할 수 있습니까?

특히 구독이나 타이머를 처리 할 때 메모리 누출 및 불필요한 작업을 방지하기 위해 useEffect 로 적절한 정리를 보장하는 것이 중요합니다. 정리를 수행하려면 useEffect 콜백에서 함수를 반환합니다. 이 정리 기능은 구성 요소가 마운트를 마치려고 할 때 또는 종속성 변경으로 인해 효과가 다시 실행되기 전에 호출됩니다.

정리 구현 방법의 예는 다음과 같습니다.

 <code class="javascript">import React, { useEffect, useState } from 'react'; function MyComponent() { const [count, setCount] = useState(0); useEffect(() => { const timer = setInterval(() => { setCount(prevCount => prevCount 1); }, 1000); // Cleanup function return () => { clearInterval(timer); }; }, []); // Empty dependency array ensures this effect runs once on mount return ( <div> <h1>Count: {count}</h1> </div> ); }</code>
로그인 후 복사

이 예에서는 useEffect 매 초마다 카운터를 증가시키는 간격을 설정합니다. 정리 함수 clearInterval(timer) 구성 요소가 마운트를 마치거나 종속성 변경으로 인해 효과가 다시 실행될 때 간격이 지워지도록합니다. 이로 인해 간격이 백그라운드에서 계속 실행되는 것을 방지하여 메모리 누출이나 예기치 않은 동작이 발생할 수 있습니다.

위 내용은 useeffect 란 무엇입니까? 부작용을 수행하는 데 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿