Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 是否有理由在不使用依赖项数组的情况下使用useEffect?_Reactjs_React Hooks - Fatal编程技术网

Reactjs 是否有理由在不使用依赖项数组的情况下使用useEffect?

Reactjs 是否有理由在不使用依赖项数组的情况下使用useEffect?,reactjs,react-hooks,Reactjs,React Hooks,因此,当我们在没有依赖性数组的情况下使用useEffect时,它会发生在每个渲染上 但是如果我直接将代码写到组件中,就会发生这种情况。那么使用它有什么理由吗 我能想到的一件事是使用cleanup函数做一些事情,但我想不出一个有效的用例。这件事既是一个普通的JS函数,也是一个没有任何依赖关系的useffect做同样的工作,但区别在于: useffect只能在React代码中访问,而不是在普通JS中。它的反应能力更强。因此,Hooks的范围仅限于React代码世界 在基于类的组件中,钩子不起作用,但

因此,当我们在没有依赖性数组的情况下使用useEffect时,它会发生在每个渲染上

但是如果我直接将代码写到组件中,就会发生这种情况。那么使用它有什么理由吗


我能想到的一件事是使用cleanup函数做一些事情,但我想不出一个有效的用例。

这件事既是一个普通的JS函数,也是一个没有任何依赖关系的
useffect
做同样的工作,但区别在于:

  • useffect
    只能在React代码中访问,而不是在普通JS中。它的反应能力更强。因此,Hooks的范围仅限于React代码世界
  • 在基于类的组件中,钩子不起作用,但常规函数会起作用
  • React将记住您传递的函数(我们将其称为“效果”),并在执行DOM更新后调用它,但在其他情况下可能不是这样。(重要
  • 默认情况下,效果会在每次完成渲染后运行,但您可以选择仅在某些值发生更改时触发效果,但这对于普通JS函数来说并不容易(除了问题之外,这只是一个附带优势)
  • 但是如果我直接将代码写到组件中,就会发生这种情况

    事实上,这并不完全正确

    例如,如果将useState更新为相同的值,React将重新评估函数组件,但不会触发效果,它将导致useEffect外部的代码执行,但useEffect内部的代码不会执行

    这是官方文件说的,


    这就是一个例子。

    但如果我直接将代码写入组件,就会发生这种情况。
    不正确
    useEffect
    函数在渲染后运行,而不是在渲染期间运行。有效的用法是使用
    setTimeout
    ,然后在cleanup函数中运行
    clearTimeout
    (该函数在组件卸载时生效)。官方回应文件显示了另一个例子:这是否回答了你的问题?