
useEffect는 컴포넌트의 부수 효과(side effect)를 처리하기 위한 Hook이다.
부수 효과(side effect)란 컴포넌트의 생명주기에 관련된 작업이나 외부 리소스와의 상호 작용을 의미한다.
- useEffect는 렌더링 직후에 부수 효과로 실행된다.
- UI 렌더링 외에 컴포넌트가 수행해야 하는 일을 효과(Effect)라 한다.
- useEffect를 렌더링이 끝난 다음에 발생하는 함수라 생각하면 간단하다.
생명주기와 관련된 작업이란 컴포넌트의 마운트(Mount), 업데이트(Update), 언마운트(Unmount)단계에서 수행되는 작업을 말한다.
외부 리소스와의 상호작용은 컴포넌트가 외부 시스템과 통신하거나 외부 리소스를 사용하는 작업을 의미한다. 이를 통해 데이터를 가져오거나 업데이트하거나, 외부 시스템과의 상호작용을 통해 어플리케이션의 동작을 제어하거나 변경할 수 있다.
useEffect(() => {
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const result = await response.json();
// 데이터 처리 로직
};
fetchData();
}, []);
useEffect(() => {
// 데이터베이스 연결 및 쿼리 실행
// 데이터 처리 로직
}, []);
useEffect(() => {
// 파일 시스템 접근 및 파일 읽기/쓰기
// 파일 처리 로직
}, []);
useEffect(() => {
// 외부 서비스와 연결 설정
// 연결된 서비스를 통한 동작 제어 또는 데이터 교환
// 작업 처리 로직
}, []);
useEffect 함수는 첫 번째 인자로 콜백 함수를 받으며, 두 번째 인자로 의존성 배열(dependency array)을 받는다.
useEffect(() => { //작업코드.. }) : 인자로 콜백함수를 받는다.
렌더링 될때 마다 실행
useEffect(() => { //작업코드.. }, [value]) : 인자로 콜백함수와 배열을 받는다.
화면에 첫 렌더링 될때 실행
value 값이 바뀔때 마다 실행
import React, { useEffect, useState } from 'react';
const ExampleComponent = () => {
const [data, setData] = useState(null);
useEffect(() => {
// 마운트될 때 실행되는 작업
console.log('Component mounted');
// 데이터 가져오기
fetchData();
// 언마운트 시 정리 작업을 위한 함수 반환
return () => {
console.log('Component unmounted');
// 정리 작업 수행
cleanup();
};
}, []); // 빈 배열을 넣어서 마운트 시에만 실행되도록 설정
useEffect(() => {
// data 상태가 업데이트될 때 실행되는 작업
console.log('Data updated:', data);
}, [data]); // data가 변경될 때만 실행되도록 설정
const fetchData = async () => {
// 외부 API에서 데이터 가져오기
const response = await fetch('https://api.example.com/data');
const result = await response.json();
// 가져온 데이터를 상태로 업데이트
setData(result);
};
const cleanup = () => {
// 정리 작업 수행
console.log('Cleaning up');
// 구독 해제, 리소스 정리 등의 작업을 여기에 포함시킬 수 있습니다.
};
return (
<div>
<h1>Example Component</h1>
{data ? (
<p>Data: {data}</p>
) : (
<p>Loading data...</p>
)}
</div>
);
};
export default ExampleComponent;