728x90
반응형
import { useEffect, useState } from 'react';
const Counter = () => {
const [count, setCount] = useState<number>(0);
const handleOnClick = () => {
setCount(prev => prev + 1);
};
console.log('useEffect 전');
useEffect(() => {
console.log('실행');
return () => console.log('-------cleanUP--------');
}, [count]);
console.log('useEffect 다음');
return (
<div>
<div>{count}</div>
<button onClick={handleOnClick}> button </button>
</div>
);
};
export default Counter;
useEffect 는 컴포넌트 렌더링이 끝난 다음에 실행된다
useEffect 인자성 배열에 [count]를 넣었으니 count 값이 바뀔 때마다 useEffect 안의 함수가 발동되는데
return 리렌더링 되면서 "실행" 전에 발동한다
👆 처음 마운트 되었을 때의 콘솔
👆 count 값 변경으로 리렌더링 일어난 후의 콘솔
useEffect 는 가장 마지막에 읽는 것은 똑같으나 return 문의 cleanup 함수를 먼저 읽고 함수를 실행한다.
이러한 순서는 마운트 시점에 이벤트 리스너를 추가하고 언마운트 될 때 리스너를 제거하는 식의 클린업 함수를 활용이 가능하다
728x90
반응형
'TIL' 카테고리의 다른 글
js 물음표 두개 연산자 (0) | 2023.02.26 |
---|---|
타입스크립트 any, unknown (0) | 2023.02.26 |
'string' 형식은 '--downlevelIteration' 플래그 또는 'es2015' 이상의 '--target'을 사용하는 경우에만 반복할 수 있습니다. (0) | 2023.02.09 |
react 오류 : Element type is invalid, expected a string (for built-in components) or a class/function but got : (0) | 2023.02.06 |
react) codebox에서 받은 파일 npm i 안 될 때 (0) | 2023.01.21 |
댓글