React Hooks中这样写HTTP请求可以避免内存泄漏

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

image.png

image.png


大家好 !👋


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


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


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


image.png


image.png


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


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


🚀让我们使用新的 AbortController API!



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


image.png


现在,我们可以访问controller.signal


“ 具有 read-only属性的 AbortController接口返回一个AbortSignal (https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) 对象实例,该实例可用于根据需要与DOM请求通信/中止它。”   来自MDN(https://developer.mozilla.org/en-US/docs/Web/API/AbortController)


让我们看看如何使用它💪


image.png


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


image.png


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


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


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



改造之前


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


image.png


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


image.png


改造之后


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


image.png


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


image.png


你可以在 https://abort-with-react-hooks.vercel.app/ 上查看此演示。


可以在 https://github.com/hua1995116/node-demo/react-abort 查看源码


干杯 🍻 🍻 🍻

相关文章
|
27天前
|
前端开发 JavaScript
React Hooks 全面解析
【10月更文挑战第11天】React Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 特性,简化了状态管理和生命周期管理。本文从基础概念入手,详细介绍了 `useState` 和 `useEffect` 的用法,探讨了常见问题和易错点,并提供了代码示例。通过学习本文,你将更好地理解和使用 Hooks,提升开发效率。
59 4
|
30天前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
14天前
|
缓存 前端开发 API
|
19天前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
2天前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
|
1天前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
5天前
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
8天前
|
前端开发 JavaScript Java
如何捕获和处理HTTP GET请求的异常
如何捕获和处理HTTP GET请求的异常
|
10天前
|
开发者
HTTP 协议请求方法的发展历程
【10月更文挑战第21天】
|
10天前
|
安全
HTTP 协议的请求方法
【10月更文挑战第21天】