프로그래밍 언어/React
[React hooks]useEffect
claire
2022. 7. 6. 00:51
리액트 훅 중에서 가장 중요한 useEffect
useEffect 함수는 인자로 콜백함수를 받는다. 콜백함수란 다른 함수의 인자로 전달된 함수를 의미한다.
useEffect(()=>{})
1번 형태는 컴포넌트가 렌더링 될 때마다 실행된다.
2번은 화면에 첫 렌더링 될때, value값이 바뀔 때 실행된다.
useEffect(()=>{},[]) 빈 배열이면 컴포넌트가 화면에 첫 렌더링될 때 실행된다.
Clean Up-정리 작업이 필요하다.
useEffect
import React, { useState, useEffect } from "react";
function App() {
const [count, setCount] = useState(1);
const [name, setName] = useState("");
const handleCountUpdate = () => {
setCount(count + 1);
};
const handleInputChange = (e) => {
setName(e.target.value);
};
// 렌더링마다 매번 실행됨-렌더링 이후
useEffect(() => {
console.log("렌더링");
});
// 마운팅+count가 변화할 때마다 실행됨
useEffect(() => {
console.log("count 변화");
}, [count]);
// 마운팅 시에만 실행됨
useEffect(() => {
console.log("마운팅");
}, []);
return (
<div>
<button onClick={handleCountUpdate}>Update</button>
<span>count:{count}</span>
<input type="text" value={name} onChange={handleInputChange} />
<span>name:{name}</span>
</div>
);
}
export default App;
- useEffect 에서는 함수를 반환 할 수 있는데 이를 cleanup 함수라고 부른다. cleanup 함수는 useEffect 에 대한 뒷정리를 해준다고 이해하면 된다.
Timer.js
import { useEffect } from "react";
const Timer = (props) => {
useEffect(() => {
const timer = setInterval(() => {
console.log("타이머 돌아가는 듕~");
}, 1000);
// 타이머를 다 쓰고 나서 정리를 하지 않으면 unmount되어도 계속 돌아간다.
// 타이머를 다 쓰고 나서 종료를 해줘야 한다. return 값에 함수를 주고 거기에서 정리해주면 된다.
return () => {
clearInterval(timer);
console.log("타이머가 종료되었습니다.");
};
}, []);
return (
<div>
<span>타이머를 시작합니다. 콘솔을 보쇼</span>
</div>
);
};
export default Timer;
App.js
import { useState } from "react";
import Timer from "./component/Timer";
function App() {
const [showTimer, setShowTimer] = useState(false);
return (
<div>
{showTimer && <Timer />}
<button onClick={() => setShowTimer(!showTimer)}>Toggle Timer</button>
</div>
);
}
export default App;