라이프 사이클과 리액트 개발자 도구

로이·2024년 4월 23일

리액트 컴포넌트의 라이프 사이클

- 마운트(Mount): 컴포넌트를 페이지에 처음 렌더링할 때
- 업데이트(Update): State나 Props의 값이 바뀌거나 부모 컴포넌트가 리렌더해서 자신도 리렌더될 때
- 언마운트(Unmound): 더 이상 페이지에 컴포넌트를 렌더링하지 않을 때

useEffect

useEffect는 어떤 값이 변경될 때마다 특정 코드를 실행하는 리액트 훅으로, 컴포넌트가 처음 렌더링될 때 특정 동작을 하거나, 페이지에서 사라질 때 메모리를 정리하는 등 라이프 사이클을 쉽게 제어 가능

하나의 값 검사하기

useEffect(callback, [deps])

- [deps]: 의존성 배열(Dependency Array = deps)
- callback: deps 요소의 값이 변경되면 실행되는 콜백 함수로, State 값을 초기화할 때도 감지됨
function App() {
	(...)
    
    useEffect(() => {
    	console.log("count 업데이트: ", count);
    }, [count]);
    
    (...)
}
export default App;

여러개의 값 검사하기

function App() {
	(...)
    
    useEffect(() => {
    	console.log("count 업데이트: ", text, count);
    }, [count, text]);
    
    (...)
}
export default App;

useEffect로 라이프 사이클 제어하기

의존성 배열에 아무것도 전달하지 않으면, useEffect는 컴포넌트를 렌더링할 때마다 콜백 함수를 실행
function App() {
	(...)
    
    useEffect(() => {
    	console.log("컴포넌트 업데이트");
    });
    
    (...)
}
export default App;
마운트 시점은 제외하고 업데이트 시점에만 콜백 함수 실행하기
function App() {
	(...)
    
    const didMountRef = useRef(false);
    
    useEffect(() => {
    	if (!didMountRef.current) {
        	didMountRef.current = true;
            return;
        } else {
        	console.log("컴포넌트 업데이트");
        }
    });
    
    (...)
}
export default App;

// Ref 객체는 돔 요소를 참조하는 것뿐만 아니라 컴포넌트의 변수로도 자주 활용됨

컴포넌트의 마운트 제어하기

의존성 배열에 빈 배열 []을 전달하면, 컴포넌트의 마운트 시점에만 콜백 함수를 실행하며, 이를 "컴포넌트의 마운트를 제어한다"라고 표현함
function App() {
	(...)
    
    useEffect(() => {
    	console.log("컴포넌트 업데이트");
    }, []);
    
    (...)
}
export default App;

컴포넌트 언마운트 제어하기

클린업

useEffect의 콜백 함수가 반환하는 함수를 클린업 함수라고 하며, 이 함수는 콜백 함수가 실행되기 전이나 컴포넌트가 언마운트하는 시점에 실행 됨

클린업을 이용해 컴포넌트 언마운트 제어하기

의존성 배열에 빈 배열 []을 전달하고, 콜백 함수가 함수를 반환하면 (클린업 함수를 사용하면), 이 함수 (클린업 함수)는 컴포넌트의 언마운트 시점에 실행 됨
function App() {
	(...)
    
    useEffect(() => {
    	return() => {
    		console.log("컴포넌트 업데이트");
        };
    }, []);
    
    (...)
}
export default App;

리액트 개발자 도구

리액트 개발자 도구 설치하기

리액트 개발자 도구는 확장 도구로서 크롬 브라우저에 설치해 사용

https://chrome.google.com/webstore

설치 확인하기

1. 'npm run start'로 앱을 실행한 뒤, 크롬 브라우저 우측 상단에 주황색의 리액트 개발자 도구 아이콘이 나타나는지 확인
2. 크롬 개발자 도구를 열고, 탭 메뉴에서 >> 모양의 더 보기 아이콘을 클릭해서, 메뉴에 [Components]와 [Profiler] 탭이 추가되었는지 확인

리액트 개발자 도구의 기능 사용하기

컴포넌트 트리 살펴보기

[Components] 탭은 현재 렌더링된 카운터 앱의 컴포넌트 트리를 시각적으로 보여줌

State 모니터링하기

[Components] 탭에서 실시간으로 변하는 State 값을 모니터링 가능

Props 모니터링하기

[Components] 탭에서 실시간으로 변하는 Props 값을 모니터링 가능

리렌더 하이라이트 기능 사용하기

[Components] 탭 검색 폼 옆에 있는 톱니 모양의 View Settings 아이콘을 클릭해서 열리는 대화상자 [General] 탭에서 "Highlight updates when component render." 의 체크박스에 표시하면, 컴포넌트를 렌더링할 때마다 하이라이트가 나타남
! 리렌더 하이라이트 기능은 [Compoents] 탭이 열려 있어야 확인 가능

0개의 댓글