

위 메서드들은 클래스형 컴포넌트에서만 사용할 수 있음

// Lifecycle.js
import React, { useEffect, useState } from "react";
const Lifecycle = () => {
const [count, setCount] = useState(0);
const [text, setText] = useState("");
return (
<div style={{ padding: 20 }}>
{count}
<button
onClick={() => {
setCount(count + 1);
}}
>
+
</button>
<input
value={text}
onChange={(e) => {
setText(e.target.value);
}}
></input>
</div>
);
};
export default Lifecycle;
useEffect(() => {
console.log("mount");
}, []);

// state가 업데이트 되는 순간을 useEffect로 제어
// dependency array 전달 안함
useEffect(() => {
console.log("update");
});

// dependency array에 count state만 전달
useEffect(() => {
console.log("update");
}, [count]);

(2) 특정 조건을 걸어서 state 변화도 가능함
// count값이 5를 넘었는지 알아보고, 1로 초기화하는함수
useEffect(() => {
if (count > 5) {
alert("최대값은 5를 넘을 수 없습니다.");
setCount(1);
}
}, [count]);
import React, { useEffect, useState } from "react";
const UnmountTest = () => {
// 컴포넌트가 unmount되는 순간 제어
useEffect(() => {
console.log("mount!");
// useEffect 내에서 return 되는 함수는, 컴포넌트가 unmount될 때 실행됨
return () => {
console.log(" == unmount == ");
};
}, []);
return <div>Unmount Testing Component</div>;
};
const Lifecycle = () => {
const [isVisible, setIsVisible] = useState(false);
const toggle = () => setIsVisible(!isVisible);
return (
<div style={{ padding: 20 }}>
<button onClick={toggle}>on / off</button>
{/* 단락회로 평가 이용하여 홤면 출력 여부를 쉽게 결정할 수 있음 */}
{/* isVisible = true 일 경우, <UnmountTest/> 컴포넌트가 렌더링됨 */}
{/* isVisible = false일 경우, &&에 의해 단락회로평가가 false가 되기 때문에 <UnmountTest/> 컴포넌트가 랜더링되지 않음 */}
{isVisible && <UnmountTest />}
</div>
);
};
export default Lifecycle;
