全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

如何在React使用影响()钩子中使用异步函数

发布时间:2022-09-22 13:15:47
发布人:syq

  在本文中,我们将介绍在 React 钩子中轻松调用函数的不同方法,以及在使用 / 时要避免的陷阱。async useEffect() async await

在React使用影响()钩子中使用异步函数

  调用异步函数 然后/捕获在使用中影响()

  async函数在脚本中执行异步操作。要等待函数返回在 React useEffect() 钩子中得到解决(实现或拒绝),我们可以使用它和方法:Promise async then() catch()

  在以下示例中,我们调用异步方法以在示例阅读应用中提取和显示存储的书籍:fetchBooks()

1

  异步/等待问题: 异步回调无法传递到使用Effect()

  也许您更愿意使用 语法来代替 。您可以尝试通过将回调传递给 来执行此操作。async/await then/catch useEffect() async

  这不是一个好主意,如果你正在使用棉绒,它会立即通知你这一点。

2

  你的 linter 抱怨,因为 的第一个参数应该是一个函数,要么不返回任何内容,要么返回一个函数来清理副作用。但函数总是返回(隐式或显式),并且对象不能作为函数调用。这可能会导致 React 应用中出现实际问题,例如内存泄漏。useEffect() async Promise Promise

3

  在此示例中,由于回调函数为 ,因此它实际上并不返回定义的清理函数,而是返回使用清理函数解析的对象。因此,永远不会调用此清理函数,并且观察者永远不会取消订阅可观察对象,从而导致内存泄漏。async Promise

  那么我们该如何解决这个问题呢?我们如何在钩子中使用带有函数的运算符?await async useEffect()

  异步/等待解决方案 1:调用 IIFE 中的异步函数

  解决此问题的一种直接方法是立即调用的函数表达式 (IIFE) 中的函数:await async

4

  顾名思义,IIFE是一个在定义后立即运行的函数。它们用于避免污染全局命名空间,以及在尝试调用可能导致包含 IIFE 的作用域(例如,在钩子中)出现问题的情况下。awaituseEffect()

  异步/等待解决方案 2:在命名函数中调用异步函数

  或者,您可以将函数放在命名函数中:await async

5

  还记得使用可观察模式的示例吗?下面介绍如何使用命名函数来防止发生的内存泄漏:async

6

  异步/等待解决方案 3:创建自定义挂钩

  我们还可以创建一个自定义钩子,其行为类似于并且可以接受回调而不会引起任何问题。use Effect()async

  自定义钩子可以这样定义:

7

  我们将能够从代码中的多个位置调用它,如下所示:

8

  通过这三种方法,我们现在可以轻松地将运算符与钩子中的函数一起使用。await async useEffect()

  定义异步函数外部使用效果()

  要在钩子外部定义一个命名函数,可以使用 useCallback() 钩子包装该函数:async useEffect()

9

  如果没有 ,函数将在每次重新渲染时重新创建,从而不必要地触发并导致性能问题。useCallback()getBooks() useEffect()

相关文章

图卷积网络和self-attention有什么区别?

图卷积网络和self-attention有什么区别?

2023-10-15
深度学习模型权重h5、weights、ckpt、pth有什么区别?

深度学习模型权重h5、weights、ckpt、pth有什么区别?

2023-10-15
机器学习中Inference和predict的区别是什么?

机器学习中Inference和predict的区别是什么?

2023-10-15
kd-tree和ball-tree在算法实现原理上有什么区别?

kd-tree和ball-tree在算法实现原理上有什么区别?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取