React

[React] useEffect

sian han 2022. 7. 1. 11:12

 

※ useEffect

  - 리액트 컴포넌트가 렌더링될 때마다 특정 작업을 수행하도록 설정할 수 있는 Hook

  - useEffect는 기본적으로 렌더링되고 난 직후마다 실행 되며,

      두 번째 파라미터 배열에 무엇을 넣는지에 따라 실행되는 조건이 달라짐

 

 

▶ useEffect의 기본형태

useEffect(function, deps

   - function : 실행하고자 하는 함수

   - deps : 배열 형태. function을 실행시킬 조건.

         = > deps에 특정값을 넣게 되면 컴포넌트가 mount 될 때, 지정한 값이 업데이트될 때 useEffect를 실행합니다

 참조 : https://cocoon1787.tistory.com/796

 

 

 

 useEffect 사용예시

import React, { useState, useEffect } from "react";
const Info = () => {
const [name, setName] = useState("");
const [nickname, setNickname] = useState("");
useEffect(() => {
console.log("렌더링이 완료됨");
console.log({
name,
nickname,
});
});

 

 

 

 

useEffect imort

import React, { useEffect } from "react";

 

 

 

 

[1] 마운트될 때만 실행하고 싶을 때

        ㄴ useEffect 에서 설정한 함수를 컴포넌트가 화면에 맨 처음 렌더링될 때마 (업데이트될 때는 실행하지 않음)

 

  ▷ 함수의 두 번째 파라미터로 비어 있는 배열을 넣어주면 됨

 

useEffect(() => {
console.log("마운트될 때만 실행됨");
}, []);

  = > 컴포넌트가 처음 나타날 때만 콘솔에 문구가 나타나고, 그 이후에는 나타나지 않을 것임

 

 

 

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

 

  ▷ 클래스형 컴포넌트

componentDidUpdate(prevProps, prevState){
    if(prevProps.value!==this.props.value){
   	 doSomething();
	}
}

 

 

props 안에 들어 있는 value 값이 바뀔 때만 특정 작업을 수행함

  =>이러한 작업을 useEffect에서 해야 한다면?

        - useEffect 의 두 번째 파라미터로 전달되는 배열 안에 검사하고 싶은 값을 넣어주면 됨

useEffect(() => {
console.log(name);
}, [name]);

 

 

[3] 뒷정리하기

  -  컴포넌트가 언마운트되기 전이나 업데이트되기 직전에

     어떠한 작업을 수행하고 싶다면 useEffect 에서 뒷정리 함수(cleanup)를 반환해 주어야 함

useEffect(() => {
console.log("effect");
console.log(name);
return () => {
console.log("cleanup 함수);
console.log(name);
};
}, [name]);

Unmount 될 때만 cleanup 함수를 실행시키고 싶다면 deps에 빈 배열을,
특정 값이 업데이트되기 직전에 cleanup 함수를 실행시키고 싶다면 deps에 해당 값을 넣어주면 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

'React' 카테고리의 다른 글

[React 프로젝트] 프로젝트 생성 / 발생에러 및 해결  (0) 2022.11.28
[React] map / key  (0) 2022.07.06
[React] useConext + Context API  (0) 2022.06.30
[React] useRef  (0) 2022.06.28
[React] useState  (0) 2022.06.28