清除超时/间隔是否必须在`useEffect` react钩子内?

搭便车的人

我想知道使用React挂钩时清除超时/间隔的正确方法和最佳实践是什么。例如,我有以下代码:

import React, { useState, useEffect, useRef } from 'react';

const Test = () => {
  const id = useRef(null)
  const [count, setCount] = useState(5)
  const [timesClicked, setTimesClicked] = useState(0)

  if (!count) {
    clearInterval(id.current)
  }

  useEffect(() => {
    id.current = setInterval(() => {
      setCount(count => count -1)
    }, 1000)

    return () => {
      clearInterval(id.current)
    }
  }, [])

  const onClick = () => setTimesClicked(timesClicked => timesClicked + 1)

  return (
    <div>countdown: {count >= 0 ? count : 0}
      <hr />
      Clicked so far: {timesClicked}
      {count >= 0 && <button onClick={onClick}>Click</button>}
    </div>
  )
}

count等于0时,间隔在Test函数主体中清除我在Internet间隔中看到的大多数示例都在内部清除useEffect,这是强制性的吗?

酷开发

您必须确保在卸下组件之前清除所有间隔。在卸载组件并清除它们时,间隔永远不会自动消失,clearInterval通常在useEffect(()=> {},[])内部调用。

卸载组件后,将调用useEffect(()=> {},[])中记录的函数。

    return () => {
      clearInterval(id.current)
    }

通过检查此沙盒链接,您可以看到在组件内部设置的间隔永远不会自动消失。https://codesandbox.io/s/cool-water-oij8s

除非clearInterval调用,否则间隔将永远保留

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React Hooks API调用-是否必须在useEffect内部?

来自分类Dev

React钩子-在useEffect内设置超时,但是能够从鼠标事件中清除超时?

来自分类Dev

自定义钩子内的useEffect不会在React中的正确oreder中被调用

来自分类Dev

使用React钩子清除输入字段

来自分类Dev

哪个React钩子首先执行useEffect或useLayoutEffect?

来自分类Dev

使用 React 钩子更正 useEffect 的依赖数组

来自分类Dev

检查时间是否在间隔内

来自分类Dev

React.useEffect钩子并订阅mousewheel事件-正确的方法

来自分类Dev

组件未使用'useEffect'钩子在React中重新渲染

来自分类Dev

我如何通过React访问useEffect钩子内置的数组?

来自分类Dev

React钩子:使用useEffect替换componentDidMount的正确方法

来自分类Dev

ActiveRecord锁是否必须在事务内发生?

来自分类Dev

React钩子如何确定对象的属性是否已更改

来自分类Dev

令牌必须是短期令牌,并且必须在合理的时间范围内

来自分类Dev

在自定义钩子和组件内使用useEffect有什么区别

来自分类Dev

React Native-使用React钩子时减少渲染时间以优化性能

来自分类Dev

React / react钩子:状态更改后子组件是否未重新渲染?

来自分类常见问题

React的useEffect钩子如何访问其下定义的所有函数表达式?

来自分类Dev

了解React的钩子useEffect函数。何时调用useffect中的回调函数(即取消订阅)?

来自分类Dev

无法在React中使用useEffect钩子将json服务器数据连接到数组中

来自分类Dev

在React中的useEffect()钩子中使用setInterval()之前尝试进行API调用

来自分类Dev

使用 React 钩子从另一个页面使用 useEffect 更新状态

来自分类Dev

使用钩子时,React组件名称必须以大写字母开头

来自分类Dev

OpenGL纹理坐标是否必须在0-1的范围内

来自分类Dev

闭包内的清除间隔

来自分类Dev

React useMemo钩子是否应该记住具有相同依赖项值的重复调用?

来自分类Dev

使用graphql-code-generator生成React / Apollo钩子时,数组类型是否不正确?

来自分类Dev

函数是否根据其调用方式不更新React钩子(尤其是useState)?

来自分类Dev

如何使用 React 钩子来确定是否应该显示侧边栏?

Related 相关文章

  1. 1

    React Hooks API调用-是否必须在useEffect内部?

  2. 2

    React钩子-在useEffect内设置超时,但是能够从鼠标事件中清除超时?

  3. 3

    自定义钩子内的useEffect不会在React中的正确oreder中被调用

  4. 4

    使用React钩子清除输入字段

  5. 5

    哪个React钩子首先执行useEffect或useLayoutEffect?

  6. 6

    使用 React 钩子更正 useEffect 的依赖数组

  7. 7

    检查时间是否在间隔内

  8. 8

    React.useEffect钩子并订阅mousewheel事件-正确的方法

  9. 9

    组件未使用'useEffect'钩子在React中重新渲染

  10. 10

    我如何通过React访问useEffect钩子内置的数组?

  11. 11

    React钩子:使用useEffect替换componentDidMount的正确方法

  12. 12

    ActiveRecord锁是否必须在事务内发生?

  13. 13

    React钩子如何确定对象的属性是否已更改

  14. 14

    令牌必须是短期令牌,并且必须在合理的时间范围内

  15. 15

    在自定义钩子和组件内使用useEffect有什么区别

  16. 16

    React Native-使用React钩子时减少渲染时间以优化性能

  17. 17

    React / react钩子:状态更改后子组件是否未重新渲染?

  18. 18

    React的useEffect钩子如何访问其下定义的所有函数表达式?

  19. 19

    了解React的钩子useEffect函数。何时调用useffect中的回调函数(即取消订阅)?

  20. 20

    无法在React中使用useEffect钩子将json服务器数据连接到数组中

  21. 21

    在React中的useEffect()钩子中使用setInterval()之前尝试进行API调用

  22. 22

    使用 React 钩子从另一个页面使用 useEffect 更新状态

  23. 23

    使用钩子时,React组件名称必须以大写字母开头

  24. 24

    OpenGL纹理坐标是否必须在0-1的范围内

  25. 25

    闭包内的清除间隔

  26. 26

    React useMemo钩子是否应该记住具有相同依赖项值的重复调用?

  27. 27

    使用graphql-code-generator生成React / Apollo钩子时,数组类型是否不正确?

  28. 28

    函数是否根据其调用方式不更新React钩子(尤其是useState)?

  29. 29

    如何使用 React 钩子来确定是否应该显示侧边栏?

热门标签

归档