useEffect 기본
- React 컴포넌트가 랜더링될 때마다 특정 작업을 실행할 수 있도록 하는 Hook
import { useState, useEffect } from 'react';
const App = () => {
const [count, setCount] = useState(1);
const [name, setName] = useState('');
const handleCountUpdate = () => {
setCount(count + 1);
};
const handleInputChange = (event) => {
setName(event.target.value);
};
useEffect(() => {
console.log("랜더링");
});
useEffect(() => {
console.log("count 변화");
}, [count]);
useEffect(() => {
console.log("name 변화");
}, [name]);
useEffect(() => {
console.log("최초");
}, []);
return (
<div>
<button onClick={handleCountUpdate}>update</button>
<span>count: {count}</span>
<input type='text' value={name} onChange={handleInputChange}></input>
<span>{name}</span>
</div>
)
};
export default App;
useEffect 정리(clean-up) 함수
import { useEffect } from "react";
const Timer = (props) => {
useEffect(() => {
const timer = setInterval(() => {
console.log("타이머 실행중");
}, 1000);
return () => {
clearInterval(timer);
console.log("타이머 종료");
}
},[]);
return (
<div>
<span>타이머 시작</span>
</div>
)
}
export default Timer;
import { useState } from 'react';
import Timer from './Component/Timer';
const App = () => {
const [showTimer, setShowTimer] = useState(false);
return (
<div>
{showTimer && <Timer />}
<button onClick={() => {setShowTimer(!showTimer)}}>toggle timer</button>
</div>
)
};
export default App;