当前位置: 首页 > 编程笔记 >

在React.js功能组件中使用useEffect()

高恺
2023-03-14
本文向大家介绍在React.js功能组件中使用useEffect(),包括了在React.js功能组件中使用useEffect()的使用技巧和注意事项,需要的朋友参考一下

React钩子useEffect有助于在React的功能组件中添加componentDidUpdate和componentDidMount组合生命周期。

到目前为止,我们知道我们只能在有状态组件中添加生命周期方法。

要使用它,我们需要从react导入它-

import React, { useEffect } from ‘react’;
const tutorials=(props)=>{
   useEffect( ()=>{
      console.log(‘hello’);
      setTimeout( ()=>{ alert(‘hello’); }, 2000);
   });
}

如果运行它,我们将在每个渲染周期看到控制台日志并发出警报。在这里,我们也可以在useEffect中调用http请求。现在,这类似于有状态组件的componentDidUpdate生命周期

我们可以在单个组件中添加多个useEffect函数。

如何使其像componentDidMount一样工作

将空数组作为第二个参数传递给useEffect函数调用,使其像componentDidMount一样工作。

const tutorials=(props)=>{
   useEffect( ()=>{
      console.log(‘hello’);
      setTimeout( ()=>{ alert(‘hello’); }, 2000);
   }, [] );
}

我们可以将第二个参数传递给useEffect,如果第二个参数有任何变化,那么React将执行此useEffect函数调用。

下面显示的第二个参数是一个数组,这意味着我们可以在该数组内添加多个元素。

import React, { useEffect } from ‘react’;
const tutorials=(props)=>{
   useEffect( ()=>{
      console.log(‘hello’);
      setTimeout( ()=>{ alert(‘hello’); }, 2000);
   }, [props.player]);
}

如何在功能组件中执行清理工作

在useEffect内部,我们可以在函数调用的末尾添加return语句,该语句返回一个函数。此返回函数执行清理工作。清理工作的执行频率还取决于传递给useEffect函数的第二个参数。

import React, { useEffect } from ‘react’;
const tutorials=(props)=>{
   useEffect( ()=>{
      console.log(‘hello’);
      setTimeout( ()=>{ alert(‘hello’); }, 2000);
      return ( ()=>{
         console.log(‘cleanup on change of player props’);
      });
   }, [props.player]);
}

我们知道,componentWillUnmount 执行时组件从实际的DOM中删除。同样,如果我们将useEffect与第二个空参数一起使用并添加返回函数调用,则它将作为componentWillUnmount'

const tutorials=(props)=>{
   useEffect( ()=>{
      console.log(‘hello’);
      setTimeout( ()=>{ alert(‘hello’); }, 2000);
      return ( ()=>{
         console.log(‘cleanup similar to componentWillUnmount’);
      });
   }, []);
}

在上面的代码示例中,我们确定将三个生命周期组合在一个函数useEffect中。这些生命周期是componentDidUpdate,componentDidMount和componentWillUnmount。

在useEffect中添加return语句是可选的,这意味着清理工作是可选的,并取决于用例。

如果我们使用多个useEffect,则它们将按照与声明相同的顺序执行。

给定正确的第二个参数,我们可以优化useEffect的性能。

仅当更改了指定的第二个参数时,useEffect才会触发。

useEffe ct中的代码执行异步发生。还有另一个类似于useEffect的钩子,但是它以同步方式工作。它称为useLayoutEffect。

由于useLayoutEffect的执行是同步发生的,因此在调用完成之前,它可能会阻止可视更新一段时间。因此,应在非常特定的用例中使用它,而在常见用例中首选标准useEffect。

还有一个钩子可用于调试以及与第三方库(例如Redux)一起使用。称为useDebugValue来显示自定义挂钩的标签。

 类似资料:
  • 问题内容: 我想通过下拉菜单完成以下操作。 1-点击显示 2-双击隐藏它 3-单击其外部的任何地方时将其隐藏。 4-通过滑动效果完成所有操作 我已经被1-3覆盖了。 我被封锁4。 如何在下面发生单击事件的同时创建幻灯片效果? 我已经使用jQuery的slideToggle(此处未显示)获得了有效的概念证明…但是,我想学习如何以反应方式进行操作。 如果您想查看完整的代码: react下拉导航栏 问题

  • 在功能组件中,我想访问从父功能组件继承的道具。为了了解我的意思,我有以下片段: 我想将App()函数中的参数传递给MainApp(),这样我就不必访问。我怎样才能正确地做到这一点?导致像这样的道具通过

  • 我正在学习使用react钩子来管理状态,但我得到了一个错误,即第5:3行:react钩子“useffect”在函数“campot”中被调用,该函数既不是react函数组件,也不是自定义react钩子函数react钩子/钩子规则 这是我的密码

  • 我在学反应。我读过一篇文章,建议我们使用函数组件,而不是扩展react.component的类,所以我跟着做了。我也使用箭头函数而不是函数关键字。即: 有没有一种方法可以使用setState()来代替setName()、setId()、…等?或者任何建议? 非常感谢!

  • 问题内容: 我正在使用样式组件,并试图设置这样的背景图片 我也试过不加引号 在两种情况下,我都得到相同的结果 http:// localhost:3000 / assets / image.png 加载资源失败:服务器响应状态为404(未找到) 我正在使用Richard Kall的React Starter 该文件肯定在指定的位置。 我加载不正确吗? 我应该提一下,我对此非常陌生(React和样式

  • 问题内容: 我从React.js开始,我想做一个简单的表格,但是在文档中我找到了两种方法。 在第一种是使用 参考文献 : 和第二个是使用 状态 内的阵营组分: 如果存在,我看不到这两种选择的优缺点。谢谢。 问题答案: 简短版本:避免引用。 它们不利于可维护性,并且失去了所见即所得模型渲染所提供的许多简单性。 您有一个表格。您需要添加一个按钮来重置表单。 参考: 操作DOM render描述了3分钟