[React] useEffect

2025. 4. 9. 16:33·프레임워크 및 라이브러리/React

`useEffect` 란 무엇인가? 

바로 이전 글에서 React의 생애주기 (Life Cycle) 를 살펴봤는데요

이제는 그 생애 주기 속에서 일어나는 사이드 이펙트(Side Effect)를 제어하는 방법인 `useEffect` 에 대해 알아봅시다.

 

사이드 이펙트란? :  쉽게 말해서 렌더링 외에 발생하는 모든 행동이라 보면 됩니다.

  • 서버에 데이터 요청하기 ( API 요청 )
  • 콘솔에 로그 찍기
  • DOM에 직접 접근하기
  • 이벤트 리스너 등록/해제 하기
  • 타이머 설정 및 정리하기

이런 것들이 모두 다 사이드 이펙트라고 볼 수 있다.

 

 

`useEffec` 는 그럼 뭘 할까요 ? 

바로 : 사이드 이펙트를 실행하는 함수 라고 보면 됩니다. 

이 함수는 컴포넌트의 생애 주기 ( Mount, Update, Unmount ) 를 따라 실행됩니다.

 

useEffect 기본 사용 방법

1. 우선 훅이니, `import { useEffect } from "react";` 임포트해서 사용합니다!

2. useEffect는 두개의 인자를 받아서 사용합니다. 첫 번째 인자는 콜백 함수 , `useEffect( ( ) => { } ) 

3. 두 번째 인수는 배열을 받는 형태입니다, [ ] (의존성 배열 dependency array, deps라고도 합니다).

 

의존성 배열이란 ?

: `[ ]` <= 이 배열 안에 지켜보고 싶은 값들을 넣습니다. 

해당 배열안에 들어있는 값의 영역이 변경될 때 마다 콜백함수를 실행시킨다고 얘기할 수 있습니다.

`[ ]` (deps) 에는 값을 여러 개 넣어도 동작합니다!

 

만일 의존성 배열이 빈 배열이면 ? (Mount)

Mount 시에만 동작하고 아무런 동작을 하지 않게됩니다. 

 

만일 의존성 배열을 생략한다면 ? (Update)

Mount 시에 동작하고 update(컴포넌트 리렌더링)될 때마다 동작하게 됩니다.

근데 여기서, Mount 시에 동작은 제외하고 update된 후에만 동작하길 원한다면 

  • `useRef` 를 사용해주면 됩니다
    `const isMount = useRef(false);` 로 isMount의 초깃값을 설정해 놓고
  • `if ( ! isMount.current) { is Mount.current = true; return }` 해주면 된다.
    그렇게 되면 강제로 return 되어 밑의 코드가 실행되지 않습니다

Clenup, 정리함수 (Unmount)

const Even = () => {
	useEffect(()=> {
    	// 클린업, 정리함수
        return () => {
        	console.log("unmount")
      };
    }, []);
    
    return <div> 짝수입니다 </div>;
 };

 

useEffect가 끝날때 실행이 됩니다,

useEffect는 Mount가 될때 실행이 되고 Unmount될때 정리함수를 호출하게 됨.

 

 

 

사용하다가 보면, 

 

그냥 useEffect 말고 이벤트 핸들러에 console.log 로 출력하는건 안돼? 

Nope. 이렇게는 되지 않습니다. 

 

왜냐, React의 상태 변경 함수는 비동기적으로  작동하기 때문입니다!

이벤트 핸들러 내부에서 상태 변화 직후 `console.log`를 찍어도, 바뀌기 전의 값이 출력될 가능성이 있습니다~

 

 

 

'프레임워크 및 라이브러리 > React' 카테고리의 다른 글

[React] useRef 복습하기!  (0) 2025.04.10
[React] useReducer 복습하기...  (0) 2025.04.09
[React] Life Cycle 라이프 사이클  (0) 2025.04.09
[React] useState hook 복습하기  (0) 2025.04.08
[React] 배포 준비하기 (vercel을 통해 간단하게 ok)  (0) 2025.02.18
'프레임워크 및 라이브러리/React' 카테고리의 다른 글
  • [React] useRef 복습하기!
  • [React] useReducer 복습하기...
  • [React] Life Cycle 라이프 사이클
  • [React] useState hook 복습하기
“하루하루가 새로운 인생이다.”
“하루하루가 새로운 인생이다.”
제가 배운 지식을 정리하고 오래 기억하고 싶어서 만든 블로그입니다.
  • “하루하루가 새로운 인생이다.”
    땅콩
    “하루하루가 새로운 인생이다.”
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • 일상 (2)
      • 에러처리 (0)
      • 프로그래밍 언어 (34)
        • TypeScript (21)
        • JavaScript (6)
        • 퍼블리싱 ( HTML, CSS ) (7)
        • 코테 (0)
      • 프레임워크 및 라이브러리 (10)
        • React (10)
        • Next.js (0)
        • Vue.js (0)
        • Spring Boot (0)
      • 데이터베이스 (0)
        • Oracle (0)
      • 디자인 (0)
        • Figma (0)
      • 개발 도구 (5)
        • Git (4)
        • Docker (0)
        • IDE (1)
      • 프로젝트 (0)
        • 개인 프로젝트 (0)
        • 팀 프로젝트 (0)
        • 프로젝트 회고 (0)
      • 정보처리기사 (12)
        • 1과목 (4)
        • 2과목 (2)
        • 3과목 (2)
        • 4과목 (2)
        • 5과목 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    TypeScript
    HTML
    GIT
    웹
    css
    자바스크립트
    Hook
    정보처리기사
    React
    이정환
    한 입 크기로 잘라먹는 타입스크립트
    타입 별칭
    정처기
    벼락치기
    타입스크립트
    javascript
    js
    리액트
    타입 스크립트
    인터페이스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
“하루하루가 새로운 인생이다.”
[React] useEffect
상단으로

티스토리툴바