번역 : 부작용 또는 부수효과
함수의 부작용 이란 코드가 의도한 주된 효과 외에 추가적으로 발생하는 효과
ex) 함수의 목적인 Input을 받아서 output을 산출하는 것 이외의 모든 행위
Data Fetching, DOM 접근 및 조작, 구독 등의 행위가 있다.
react에 함수컴포넌트 내에서 side Effect를 발생시키면 두 가지 문제가 발생한다.
side effect가 렌더링을 blocking 한다.
함수 컴포넌트의 return(html)이 보여지기 전에 side Effect동작이 실행된다.(사이트가 멈춰있다)
매 렌더링마다 side effect가 수행된다.
UI 업데이트가 발생할 때마다 매번 side Effect동작이 실행된다.
=>
useEffect는 React에서 side effect를 편리하고 안전하게 발생시킬 수 있게 도와주는 hook이다.
import { useEffect } from 'react'
// 사용법
useEffect(콜백 함수, 의존성 배열);
// 1. 의존성 배열이 전달되지 않았으므로 ⭐️매 렌더링⭐️마다 side effect가 실행된다
useEffect(() => {
// side effect
});
// 2. 첫 번째 렌더링 이후에 side effect를 실행하고
// 그 이후에는 ⭐️value 값이 변했을 때만⭐️ 실행한다.
useEffect(() => {
// side effect
}, [value]);
// 3. 첫 번째 렌더링 이후에 side effect를 실행하고
// 그 이후에는 ⭐️value1, value2 중 하나라도 변하면⭐️ side effect를 실행한다.
useEffect(() => {
// side effect
}, [value1, value2]);
//4.첫 번째 랜더링 이후에 side effect를 실행하고
// 그 이후에는 실행하지 않는다. 의존성배열은 선언했지만 값이 없기 때문
useEffect(() => {
// data fetching side effect
}, []);
컴포넌트가 렌더링 된다.
(최초로 진행되는 렌더링은 브라우저에 처음으로 이 컴포넌트가 보였다는 의미로 mount
라고 표현합니다.)
useEffect 첫 번째 인자로 넘겨준 콜백 함수가 호출된다. (Side Effect)
컴포넌트의 state 또는 props가 변경되었을 경우 리렌더링이 발생한다. (update)
useEffect는 두 번째 인자에 들어있는 의존성 배열을 확인한다
컴포넌트가 더 이상 필요 없어지면 화면에서 사라진다.
(컴포넌트가 브라우저의 화면에서 사라졌다는 의미로 unmount
라고 표현합니다.)
side Effect가 페이지 이동 후에도 계속 남아있다면 side effect를 clean up 해줘야 한다.