useEffect를 사용하면 컴포넌트가 화면에 나타날 때 & 사라질 때,
props가 업데이트 될 때 & 업데이트 되기 전에 할 행위들을 정해줄 수 있다.
useEffect를 사용하기 위해서 코드 맨 윗줄에 import React, { useEffect } from 'react';를 추가해야 한다.
useEffect의 첫번째 파라미터에는 화면에 나타날 때 실행할 함수를 넣어주고,
그 함수의 리턴 값으로는 화면에 사라질 때 실행될 함수를 넣어준다(생략가능). 두번째 파라미터는 []로 비워준다.
아래와 같이 작성하면 User 컴포넌트가 화면에서 사라질 때마다 '컴포넌트가 화면에 나타남'이 콘솔에 출력되고,
컴포넌트가 화면에서 사라질 때마다 '컴포넌트가 화면에서 사라짐'이 콘솔에 출력된다.
function User (props) {
const { name, email } = props;
useEffect( () => {
console.log("컴포넌트가 화면에 나타남");
return () => {
console.log("컴포넌트가 화면에서 사라짐");
}
}, []);
return (
<div>
<b>{name}</b> ({email})
</div>
)
}
컴포넌트가 화면에서 나타나고 사라질 때 실행되는 것이 아니라
props가 업데이트될 때와 업데이트 되기 전에 할 행위들을 지정하고 싶으면
useEffect의 첫번째 파라미터로 props가 업데이트 되고 나서 할 함수를 작성하고,
그 함수의 리턴 값으로는 props가 업데이트 되기 전에 할 함수를 작성한다.
그리고 두번째 파라미터로 그 props의 이름을 넣어준다.
아래와 같이 작성하면 User 컴포넌트가 처음 화면에 나타날 때 'name 값이 설정됨'이 출력된다. 그리고
User의 props인 name이 변경될 때마다 먼저 'name 값이 설정되기 전에 할 일'이 출력되고,
'name 값이 설정됨'이 출력된다.
function User (props) {
const { name, email } = props;
useEffect( () => {
console.log("name 값이 설정됨");
return () => {
console.log("name 값이 설정되기 전 할 일");
}
}, [name]); // <- 이 props가 업데이트될 때마다 useEffect가 발동된다
return (
<div>
<b>{name}</b> ({email})
</div>
)
}
'프론트엔드 > React' 카테고리의 다른 글
useReducer (0) | 2021.09.14 |
---|---|
React.memo (0) | 2021.09.12 |
useCallback (0) | 2021.09.06 |
useMemo (0) | 2021.09.06 |
useRef (0) | 2021.09.03 |