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;