반응형
Component Life Cycle
리액트 컴포넌트의 라이프사이클은
Mount -> Update -> Unmout로 진행된다.
- Mount : 컴포넌트가 최초에 렌더링 됨
- Update : 컴포넌트가 리렌더링 됨
- Unmount : 컴포넌트가 화면에서 제거 됨
useEffect를 통한 component Life Cycle 제어
useEffect : 두 번째 인수인 [] 배열의 값이 바뀌면, 첫 번째 매개변수의 함수를 호출
예)
useEffect(() => {
console.log(`count: ${count} / input ${input}`);
}, [count, input]); // 의존성 배열, dependency array(deps)
예) 클릭을 홀수 번 할 때 없어지는 컴포넌트
App.jsx
import { useState, useEffect, useRef } from "react";
import "./App.css";
import Even from "./components/Even";
function App() {
const [count, setCount] = useState(0);
const isMount = useRef(false);
// 1. 마운트 : 탄생
useEffect(() => {
console.log("App Mount");
}, []);
// 2. 업데이트 : 변화, 리렌더링
useEffect(() => {
if (!isMount.current) {
isMount.current = true;
return;
}
console.log("App Update");
console.log("Update");
}); // deps 생략하면, 리렌더링 시 매번 실행 됨
const onClickButton = () => {
setCount(count + 1); // setState는 비동기로 실행되기 때문에
console.log(count); // count값이 바로 변하지 않음
};
return (
<div className="App">
<h1>Simple Counter {count}</h1>
<button onClick={onClickButton}>클릭</button>
<section>{count % 2 === 0 ? <Even /> : null}</section>
</div>
);
}
export default App;
Even.jsx
import { useEffect } from "react";
const Even = () => {
useEffect(() => {
console.log("Even Mount");
return () => {
// 3. 언마운트 : 제거
// 클린업, 정리함수
console.log("Even Unmount");
};
}, []);
return <div>짝수입니다.</div>;
};
export default Even;
반응형
'React' 카테고리의 다른 글
[React] component 기본 구조 / State Lifting (0) | 2024.09.01 |
---|---|
[React] useRef로 component 내에 reference객체 생성 (0) | 2024.09.01 |
[React] Comonent 리랜더링 조건 / State로 Component 상태 관리 (0) | 2024.08.18 |
[React] Props를 통해 Component로 데이터 전달 (0) | 2024.08.04 |
[React] Component & JSX (0) | 2024.08.04 |