React
useEffect - cleanup
jyeounjae
2022. 9. 20. 15:38
useEffect Cleanup
useEffectのcleanupはuseEffectHookの機能であり、コンポーネントで登録したuseEffectを削除する役割を担当しています。
このcleanupは以下の二つのケースで実行されます。
このcleanupは以下の二つのケースで実行されます。
①useEffectが実施する前。
②コンポーネントがアンマウントされる前。
実装方法はuseEffectにreturnを定義し、returnの中で上の①と②の時に実施させたい機能を記述すればいいです。
App.js
import React, { useState, useEffect } 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;
Timer.js
import React, { useEffect }from 'react';
const Timer = (props) => {
useEffect(() => {
const timer = setInterval(() => {
console.log("Timer Working...");
}, 1000);
return () => {
clearInterval(timer);
}
},[]);
// []とは、コンポーネントがマウントされる時に1回しか実行されない。
// そのため、intervalは継続実行される。
// もし、timerコンポーネントにreturnを定義してくれないと永遠にsetIntervalは動作しますが
// returnを定義することにより、コンポーネントがアンマウントされる
// 直前にreturnが実行されユーザが定義したい行動を定義することが可能になる。
return (
<div>
<span>get start timer</span>
</div>
)
}
export default Timer;