Koras02
Koras02코딩웹
Koras02
전체 방문자
오늘
어제
  • 분류 전체보기 (299)
    • 백엔드 (59)
      • nestjs (2)
      • Ruby (3)
      • PostgresQL (11)
      • MySQL (5)
      • Haskell (7)
      • Koa (3)
      • Java (3)
      • Python (5)
      • Rust (5)
      • MongoDB (2)
      • PHP (3)
      • Spring Boot (1)
      • redis (5)
      • deno (2)
    • 웹서버 (3)
      • nginx (1)
      • Apache (2)
      • Google Web Server (0)
    • 모바일개발 (5)
      • Figma (0)
      • React Native (2)
      • swift (0)
      • Flutter (3)
      • Kotlin (0)
    • 프론트 엔드 (158)
      • HTML (34)
      • CSS (7)
      • Javascript (35)
      • Angular (0)
      • Typescript (2)
      • React (58)
      • Vue (2)
      • GIT (6)
      • GraphQL (1)
      • Doker (4)
      • Go (8)
      • svelte (1)
      • gatsby (0)
    • etc. (47)
      • Notion (0)
      • TIL (24)
      • Algorithm (17)
      • Algorithm 개념 정리 (2)
      • Wiki (3)
      • Official document (1)
    • 웹개념 (12)
    • 변수정리 (1)
    • VSCode (2)
    • 포트폴리오 분석 (2)
      • React (2)
    • os (5)
      • 윈도우 (4)
      • Mac (0)
      • 가상머신 (0)
      • linux (1)
    • 응용프로그램언어 (2)
      • C (2)
      • C++ (0)
      • C# (0)
    • 블로그 운영관련 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
글쓰기

공지사항

  • [공지사항] 개발 이슈나 공식문서 업데이트 업로드 예정입니⋯

인기 글

태그

  • 문자열
  • 데이터 타입
  • 프로그래머스
  • koa
  • Java
  • 알고리즘
  • PostgreSQL
  • javascript
  • React
  • CSS
  • 하스켈
  • Rust
  • html5
  • go
  • Til
  • Haskell
  • redis
  • Flutter
  • html
  • mysql

티스토리

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
Koras02

Koras02코딩웹

[React] useEffect란 ?
프론트 엔드/React

[React] useEffect란 ?

2022. 2. 5. 19:29
728x90

이번시간에는 React에서 제공하는 Hooks중 하나인 useEffect에 대해서 알아보도록 하겠습니다.

 

1.UseEffect란?

useEffect Hook을 이용하여 우리가 React에게 컴포넌트가 렌더링 된 이후에

어떤일을 수행할지 정해줄 수 있습니다.

useEffect는 기본적으로 몇 가지 조건에 의해 작동합니다.

  • 페이지가 처음 렌더링 되고 난후 useEffect는 무조건 한번 실행됩니다.
  • useEffect에 배열로 지정한 useState 값이 변경될 때 실행되게 됩니다.

즉 React에서는 우리가 작성한 함수를 기억했다가 DOM 업데이트

수행 이후에 이를 불러내서 실행해주게 됩니다.

UseEffect를 컴포넌트 안에서 부르면?

useEffect를 컴포넌트 내부에 두어 effect를 통해 앞전에 나온

state 변수 혹은 props에 접근할 수 있게 됩니다.

 

2. useEffect의 구조

import React, {useState, useEffect} from 'react';

export default function Example() {
   const [count, setCount] = useState(0);
   
   useEffect(() => {
      console.log(`${count} times clicked`);
   })
   
   return (
      <p>{count} times clicked!</p>
      <button onClick={() => setCount(count+1)}>
        Increase
      </button>
   )

}

useEffect는 컴포넌트가 렌더링 될 때마다 특정 작업을 수행하도록 하는 Hook(훅)입니다.

 

위 코드의 예시로 버튼을 클랙해을때마다 count의 값이 바뀌어 다시 렌더링이 되기 때문에

버튼을 클릭할 때마다 useEffect 안에 있는 console이 찍히게 되는 것 입니다.

 

3. 자세한 사용법

처음 렌더링에만 실행하고 싶을 때 

import React, { useState, useEffect } from 'react';
function Example() {
   const [count, setCount] = useState(0);
   
   // 함수의 두번째 파라미터에 빈배열을 작성해준다.
   useEffect(() => {
      console.log(`${count} times clicked`);
   },[])
   
   return (
     <p>{count} times clicked!</p>
     <button onClick = {() => setCount(count + 1)}>
        Increase
     </button>
   )
}

가장 처음 랜더링이 될 때만 실행하고 그 이후에는 실행을 할 필요가 없다면 함수의 두번째 파라미터에는

빈 배열로 넣어주면 됩니다.

 

특정 값이 업데이트 될 때만 실행하고 싶을 때

import React, { useState, useEffect } from 'react';
function Example() {
   const [count, setCount] = useState(0);
   
   // 함수의 두번째 파라미터로 전달되는 배열안에 검사하고 싶은 값을 추가
   useEffect(() => {
      console.log(`${count} times clicked`);
   },[count])
   
   return (
     <p>{count} times clicked!</p>
     <button onClick = {() => setCount(count + 1)}>
        Increase
     </button>
   )
}

배열 안에 useState통해 관리되는 상태값을 넣어줘도 되고 또한 props로 전달받은 값을 넣어 주어도 됩니다.

실제로는 여러값들이 존재하는 컴포넌트에서 특정 값이 변할때만 useEffect를 호출하기 위해서 꼭 알아둬야 합니다.

컴포넌트가 업데이트  될때 (특정 props, state가 바뀔때)

useEffect(() => {
  console.log("바뀌는 값")
},{props(바뀌는 값))

 

마무리 하기

import React, {useState, useEffect} from 'react';

function Example() {
   const [count, setCount] = useState(0);
   
   // 함수의 두번째 파라미터에 빈 배열 작성 
   useEffect(() => {
     console.log("effect");
     console.log(`${count} times clicked`)
     
     return () => {
         console.log('cleanup');
         console.log(`${count} times clicked`);
     }
   })
   
   return (
     <p>{count} times clicked!</p>
     <button onClick = {() => setCount(count+1)}>
      Increase
     </button>
   )
}

컴포넌트가 언마운트 되기 전이나, 업데이트 되기 직전에는 어떠한 작업을 수행하기 위해서 

useEffect에 cleanup 함수를 반환해주어야 합니다.

 

컴포넌트가 나타날 때 콘솔에는 effect가, 사라질 때는 cleanup이 보여지게 되고,

만약 언마운트 될 때만 뒷정리 함수를 호출해주고 싶다면 

useEffect 함수의 두번째 파라미터에 빈 배열을 넣어주면 됩니다.

 

 

참고 자료

 

useEffect란

useEffect를 알기위해선 side Effect를 알아야한다.React 컴포넌트가 화면에 렌더링된 이후에 비동기로 처리되어야 하는 부수적인 효과들을 흔히 Side Effect라고 일컽는다. 대표적인 예로 어떤 데이터를

velog.io

 

[React] useEffect 뿌시기

useEffect Hook을 이용하여 우리는 React에게 컴포넌트가 렌더링 이후에 어떤 일을 수행해야하는 지를 정할 수 있음. React는 우리가 작성한 함수를 기억했다가 DOM 업데이트 수행 이후 이를 불러내 실

velog.io

 

'프론트 엔드 > React' 카테고리의 다른 글

[React] useRef 란?  (0) 2022.02.07
[React] State 생명주기 (클래스형과 함수형의 차이)  (0) 2022.01.28
[React] 클래스형 컴포넌트와 함수형 컴포넌트의 차이  (0) 2022.01.27
    '프론트 엔드/React' 카테고리의 다른 글
    • [React] React 상태관리에 대해 알아보자 -context api, redux, mobx, swr
    • [React] useRef 란?
    • [React] State 생명주기 (클래스형과 함수형의 차이)
    • [React] 클래스형 컴포넌트와 함수형 컴포넌트의 차이
    Koras02
    Koras02
    현재 사용중인 언어 - next-js,react,vue, typescript

    티스토리툴바