千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 如何在React使用影响()钩子中使用异步函数

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

来源:千锋教育
发布人:syq
时间: 2022-09-22 13:15:47 1663823747

  在本文中,我们将介绍在 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()

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT