teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ちょっと間違っていたので修正しました。timeoutIDはnullではなくundefinedになります。

2021/11/03 03:39

投稿

ukyoda
ukyoda

スコア386

answer CHANGED
@@ -1,4 +1,4 @@
1
- `timeoutID`はローカル変数だと思うので、おそらく`setSecondCall`が呼ばれた後、再レンダリングが走ってしまい、IDがクリアされているのではないでしょうか?そのため、`clearTimeout`でタイマーのクリアがされていないのだと思います。`clearTimeout`の呼び出す直前で、`console.log`を使って`timeoutID`の値を確認してみてください。多分、`timeoutID`が`null`になっていることが確認できると思います。
1
+ `timeoutID`はローカル変数だと思うので、おそらく`setSecondCall`が呼ばれた後、再レンダリングが走ってしまい、IDがクリアされているのではないでしょうか?そのため、`clearTimeout`でタイマーのクリアがされていないのだと思います。`clearTimeout`の呼び出す直前で、`console.log`を使って`timeoutID`の値を確認してみてください。多分、`timeoutID`が`undefined`になっていることが確認できると思います。
2
2
 
3
3
  解決策としては、`useRef`で`timeoutID`を作ってやるといいと思います。
4
4
  これでタイムアウトは止められるようになるのではないでしょうか?