리액트에서 "useEffect" 훅을 사용하는 방법과 그 용도는 무엇인가요?
_____A1: useEffect는 함수형 컴포넌트에서 사이드 이펙트를 수행하도록 하는 React 훅입니다. 데이터 fetching, 구독 설정, 수동 DOM 조작 등 부작용 작업을 컴포넌트 생명주기에 맞춰 처리할 수 있게 해줍니다.
---
Q2: useEffect 훅을 사용하는 기본 문법은 어떻게 되나요?
A2:
```jsx
useEffect(() => {
// 실행할 사이드 이펙트 코드
});
```
첫 번째 인수로는 콜백 함수를 받고, 이 콜백 안에 사이드 이펙트 코드를 작성합니다.
---
Q3: useEffect는 언제 실행되나요?
A3: 기본적으로 컴포넌트가 렌더링된 직후마다 실행됩니다. 즉, 초기 렌더링 완료 후와, 컴포넌트가 업데이트되어 리렌더링될 때마다 실행 됩니다.
---
Q4: useEffect 콜백 함수에서 cleanup(정리) 함수를 반환하는 이유는 무엇인가요?
A4: 컴포넌트가 언마운트되거나, 다음 useEffect 실행 전에 기존 이펙트를 정리(cleanup)할 필요가 있을 때 반환하는 함수를 사용합니다. 예를 들어, 이벤트 리스너 해제, 타이머 클리어, 구독 취소 등에 활용됩니다.
```jsx
useEffect(() => {
const timer = setTimeout(() => console.log('Hello'), 1000);
return () => clearTimeout(timer); // 정리 함수
}, []);
```
---
Q5: useEffect 두 번째 인자인 의존성 배열(dependencies)은 무엇인가요?
A5: 의존성 배열은 useEffect가 다시 실행될 조건을 지정하는 배열입니다. 배열 안에 명시한 값들 중 하나라도 변경되면 useEffect가 재실행되고, 빈 배열([])이면 컴포넌트가 처음 마운트될 때만 실행됩니다.
예:
```jsx
useEffect(() => {
console.log('count가 변경됨:', count);
}, [count]);
```
---
Q6: 의존성 배열을 생략하면 어떻게 되나요?
---
Q7: useEffect와 componentDidMount, componentDidUpdate, componentWillUnmount 중 무엇과 같은 역할을 하나요?
A7: useEffect는 class 컴포넌트의 세 가지 생명주기 메서드 기능을 모두 제공합니다.
- 빈 배열([])과 함께 쓰면 `componentDidMount` 역할
- 의존성 배열에 값이 있으면 그 값이 바뀔 때 실행되어 `componentDidUpdate` 역할
- cleanup 함수 반환 시 `componentWillUnmount` 역할
---
Q8: useEffect 안에서 상태(state)를 업데이트해도 되나요?
A8: 네, 가능합니다. 다만 상태 업데이트가 실행되면 컴포넌트는 다시 렌더링되고, 의존성 배열에 따라 useEffect도 재실행될 수 있으니 무한 루프에 빠지지 않도록 주의해야 합니다.
---
Q9: useEffect를 어떻게 활용할 수 있나요?
A9: 대표적인 활용 예는 다음과 같습니다.
- API 데이터 fetching
- 이벤트 리스너 등록 및 제거
- 타이머 설정 및 해제
- 외부 라이브러리 초기화 및 정리
- 윈도우, 문서 타이틀 변경 등 DOM 직접 조작
---
Q10: useEffect로 비동기 함수(async)를 어떻게 사용하나요?
A10: useEffect 콜백 함수는 직접 async를 붙일 수 없으므로 내부에 async 함수를 선언해 호출하는 방식으로 처리합니다.
예:
```jsx
useEffect(() => {
async function fetchData() {
const response = await fetch('/api/data');
const result = await response.json();
setData(result);
}
fetchData();
}, []);
```
---
이상으로 React의 useEffect 훅 사용법과 핵심 개념에 대해 FAQ 형식으로 정리했습니다.
사이드 이펙트란, 컴포넌트의 렌더링과는 별개로 발생하는 작업을 의미하며, 예를 들어 데이터 fetching, 구독 설정, 수동 DOM 조작 등이 포함됩니다.
`useEffect`는 이러한 작업을 수행하고, 컴포넌트가 업데이트될 때마다 특정 작업을 실행할 수 있도록 도와줍니다.
기본 사용법`useEffect`는 컴포넌트 내부에서 호출되며, 두 개의 인자를 받습니다:1. 첫 번째 인자 : 사이드 이펙트를 수행하는 함수입니다.
이 함수는 컴포넌트가 렌더링된 후에 실행됩니다.
2. 두 번째 인자 : 의존성 배열입니다.
이 배열에 포함된 값이 변경될 때만 첫 번째 인자로 전달된 함수가 실행됩니다.
이 배열을 생략하면, 컴포넌트가 렌더링될 때마다 함수가 실행됩니다.
예제```javascriptimport React, { useState, useEffect } from 'react';function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { // 사이드 이펙트: 문서 제목을 업데이트 document.title = `Count: ${count}`; // 클린업 함수: 컴포넌트가 언마운트될 때 호출 return () => { console.log('Cleaning up...'); }; }, [count]); // count가 변경될 때만 실행 return (
You clicked {count} times
2. 구독 설정 : 웹소켓이나 이벤트 리스너와 같은 외부 데이터 소스에 구독할 때 유용합니다.
3. DOM 조작 : 특정 DOM 요소에 직접 접근하여 스타일을 변경하거나 애니메이션을 적용할 때 사용합니다.
4. 클린업 : 컴포넌트가 언마운트될 때 리소스를 정리하는 작업을 수행할 수 있습니다.
이는 메모리 누수를 방지하는 데 중요합니다.
의존성 배열- 빈 배열 (`[]`) : 컴포넌트가 처음 렌더링될 때만 실행됩니다.
마운트 시 한 번만 실행하고, 이후에는 실행되지 않습니다.
- 특정 값들 : 배열에 포함된 값이 변경될 때마다 실행됩니다.
이 방법은 특정 상태나 props가 변경될 때만 사이드 이펙트를 발생시키고 싶을 때 유용합니다.
결론`useEffect` 훅은 리액트 컴포넌트에서 사이드 이펙트를 관리하는 강력한 도구입니다.
이를 통해 컴포넌트의 생명주기에 따라 다양한 작업을 수행할 수 있으며, 코드의 가독성과 유지보수성을 높이는 데 기여합니다.
리액트를 사용할 때 `useEffect`의 사용법을 잘 이해하고 활용하는 것이 중요합니다.
작성자:
ㅁㅁ [비회원]
| 작성일자: 1년 전
2024-08-26 12:32:18
조회수: 173 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 173 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.