react取消所有请求_React Hooks中取消HTTP请求来避免内存泄漏

大家好 ! 👋

今天,让我们看一下在 React Hooks 中使用 fetch 和Abort Controller取消Web请求从而来避免内存泄露! 🤗

当我们用 Fetch 来管理数据时,有时我们想取消请求(例如,当我们离开当前页面时,当我们关闭模态框,...)。

在👇下面的示例中,我们要在切换路由的时候获取并展示数据。 但是,我们在获取数据完毕之前就离开了路由/页面。

7p2coedr8hhtdltuzxu1

4uoij0o2qmdlppeykeln

我们刚刚看到了一个内存泄漏!让我们看看为什么会出现这个错误,以及它的具体含义。

❓为什么有内存泄漏?:我们有一个执行异步fetch(url)任务的组件,然后更新该组件的状态来显示元素,但是我们在请求完成之前就卸载(unmounted)了该组件。 由于已卸载组件的状态(例如 setUsers,setState)被更新, 所以造成了此次内存泄露。

🚀让我们使用新的 AbortController API!

Abort Controller 允许您订阅一个或多个Web请求,并具有取消请求的能力。 🔥

现在,我们可以访问controller.signal。“ 具有 read-only属性的 AbortController接口返回一个AbortSignal (https://developer.mozilla.org... 对象实例,该实例可用于根据需要与DOM请求通信/中止它。” 来自MDN(https://developer.mozilla.org...)

让我们看看如何使用它💪

最后,如果我们想取消当前请求,只需调用abort()。 另外,你可以获取controller.signal.aborted,它是一个只读属性,它返回一个Boolean表示与DOM通讯的信号是(true)否(false)已被放弃。

❗️注意:调用abort()时,fetch() promise 会以名为AbortError 的 DOMException reject。

是的,你刚刚学习了如何取消Web请求! 👏

🤩让我们用React Hooks做到这一点!

❌改造之前

下面是一个组件示例,它请求数据并展示它们。

如果我们离开页面的速度太快而导致请求未完成:MEMORY LEAK

✅ 改造之后

我们使用 useEffect 来订阅我们的 fetch 请求来避免内存泄漏。 当组件卸载(unmounted)时,我们使用useEffect的清理方法来调用abort()。

现在,不再有内存泄漏! 😍

干杯 🍻 🍻 🍻译文来自 https://dev.to/somedood/best-...

译者: 秋风的笔记(github/hua1995116)

最后

欢迎关注公众号 「秋风的笔记」,主要记录日常中觉得有意思的工具以及分享开发实践,保持深度和专注度。

也可以扫码加我微信好友,进交流群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值