---
# System prepended metadata

title: "\U0001F3C5Day34 - React 基礎練習 (11) - useEffect 如何關閉 setInterval"
tags: [React 直播班 - 2025 冬季班]

---

# 🏅Day34 - React 基礎練習 (11) - useEffect 如何關閉 setInterval

### 關閉 setInterval 目的
在 React 中，關閉計時器不只是為了保持程式碼乾淨，更是為了避免以下問題：

- 「元件消失了，但計時器還在跑」
當元件被移除時，JavaScript 並不會自動幫你停下 setInterval，它會繼續在背景運作，嘗試去更新一個已經不存在的元件狀態，導致記憶體洩漏 (Memory Leak)。
- 「計時器累加疊加」
如果不執行清除動作，每次元件重新建立時都會啟動一個新的計時器，如果你反覆切換開關 10 次，背景就會有 10 個計時器同時在跑，數字跳動的速度會變得異常混亂，最終導致瀏覽器效能崩潰。

使用 setInterval() 時，setInterval() 方法會回傳 interval ID，我們可以透過 interval ID 將這個 setInterval() 清除
例如：
```js
const intervalId = setInterval(() => {
...
}, 1000)

clearInterval(intervalId)
```

當我們在 useEffect() 使用到 setInterval()，需要在元件移除時將 setInterval() 清除，可以在 useEffect() 裡面的 Effect 函式使用 return，並回傳另一個函式，這個函式會在該元件移除時被呼叫。
例如：
```js
React.useEffect(() => {
    const intervalId = setInterval(() => {
      ...
    }, 1000)

    return () =>clearInterval(intervalId)
  },[])
```

這樣就可以透過 useEffect() 控制元件建立及移除時需要做的事。


## 題目
請複製 （右下角 fork）這個[範例](https://codepen.io/yen-kg/pen/YzmMNZJ)，在 Child 元件移除時執行 clear() 方法，完成後會呈現以下畫面。


![](https://hackmd.io/_uploads/HkKlGEcs2.gif)


<!-- 解答： 
```
function Child({count, setCount}) {
  
  React.useEffect(() => {
    const intervalId = setInterval(() => {
      setCount(pre => pre + 1);
    }, 1000)
    return () =>clearInterval(intervalId)
  },[])

  return <h1>Child 元件: {count}</h1> 
}

```
-->



| Name | Codepen | 
| -------- | -------- |
| Mikka     | [codepen](https://codepen.io/Miikaa/pen/bNewKPV)     |
| 7lun     | [codepen](https://codepen.io/mfyvqhsn-the-bold/pen/emzGZKr?editors=1010)     |
| Tetsu |[Codepen](https://codepen.io/ttgchang/pen/zxBpmmE)|
|TWLeoC|[Codepen](https://codepen.io/TWLeoC/pen/QwEaZJy?editors=0010)|
| Nooooora | [CodePen](https://codepen.io/Nora-Ch/pen/VYjyVPO?editors=1010)|
| Chia |[Codepen](https://codepen.io/Chia-the-encoder/pen/QwEaJxM)|
| 地瓜 |[Codepen](https://codepen.io/ChippyYU/pen/raLpQrZ?editors=1010)|
| 老屠 |[Codepen](https://codepen.io/fsgfxvlb-the-selector/pen/bNeaObo?editors=0010)|
| Rogan |[Codepen](https://codepen.io/RoganHsu/pen/yyJpGNx)|
| Eric | [Codepen](https://codepen.io/wc-su/pen/pvbpqXM) |
| cks40660 | [Codepen](https://codepen.io/CKS40660/pen/azZEMyR) |
| RUDY | [Codepen](https://codepen.io/Rudy-crw/pen/NPrXJvd?editors=0010) |
| Jin | [Codepen](https://codepen.io/Jin-L/pen/zxBpbmM) |
| 社子畢卡索 | [Codepen](https://codepen.io/pen?template=YPWYggX) |
| 小懿 | [Codepen](https://codepen.io/YT-the-vuer/pen/myEpZBy?editors=0010) |
| wind | [Codepen](https://codepen.io/wind7y/pen/PwzEMmJ) |
| Melanie | [Codepen](https://codepen.io/pnrcspte-the-animator/pen/jErZNoq) |
| Leonard | [Codepen](https://codepen.io/hyyfjqra-the-sans/pen/gbMvObV?editors=1010) |
| Percy | [Codepen](https://codepen.io/Percy-Ku/pen/XJKgjYZ) |
| 平平 | [Codepen](https://codepen.io/ypinpin/pen/LEZQYKP) |
| kashiwatei | [Codepen](https://codepen.io/kashiwatei/pen/OPXQVEG?editors=1010) |
| Eileen | [Codepen](https://codepen.io/Eileen-io/pen/WbxMGwM) |
| KOMATSU PEI | [Codepen](https://codepen.io/Komatsu2021/pen/vEKdJZX?editors=1010) |
| andy | [Codepen](https://codepen.io/ewnblckz-the-styleful/pen/MYeQOOE?editors=1010) |
| Jenna | [Codepen](https://codepen.io/abiscc14/pen/vEKRBKe) |
| 7Red | [Codepen](https://codepen.io/cch2655/pen/YPWaVJa) |
| JiaMori | [Codepen](https://codepen.io/jiamori/pen/azZYaQe) |
| 星雪糖 | [Codepen](https://codepen.io/vfpofbgm-the-scripter/pen/wBWjEbq?editors=0011) |