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 查看源码


干杯 🍻 🍻 🍻

相关文章
|
6天前
|
前端开发 JavaScript
深入理解并实践React Hooks —— useEffect与useState
深入理解并实践React Hooks —— useEffect与useState
27 1
|
1月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
2月前
|
前端开发 JavaScript 安全
TypeScript在React Hooks中的应用:提升React开发的类型安全与可维护性
【7月更文挑战第17天】TypeScript在React Hooks中的应用极大地提升了React应用的类型安全性和可维护性。通过为状态、依赖项和自定义Hooks指定明确的类型,开发者可以编写更加健壮、易于理解和维护的代码。随着React和TypeScript的不断发展,结合两者的优势将成为构建现代Web应用的标准做法。
|
2天前
|
前端开发 JavaScript 开发者
深入探索React Hooks的魔力
深入探索React Hooks的魔力
22 10
|
22天前
|
JavaScript 前端开发 安全
[译] 使用 TypeScript 开发 React Hooks
[译] 使用 TypeScript 开发 React Hooks
|
23天前
|
前端开发 JavaScript API
React Hooks 的使用场景有哪些?
【8月更文挑战第25天】
38 2
|
24天前
|
存储 前端开发 JavaScript
React Hooks的魔法:如何在组件世界里施展响应式与复用的魔法
【8月更文挑战第27天】React Hooks 是自 React 16.8 起新增的功能,支持开发者在无需类组件的情况下利用 React 的状态管理和特性。本文通过实例展示了多种核心 Hooks 的使用方法:`useState` 用于实现响应式状态管理;`useEffect` 处理副作用操作,如数据获取等;`useMemo` 和 `useCallback` 有助于性能优化;`useRef` 则提供对 DOM 的直接引用。
27 2
|
6天前
|
前端开发 JavaScript
react hooks深拷贝后无法保留视图状态
react hooks深拷贝后无法保留视图状态
12 0
|
30天前
|
前端开发 JavaScript
react hooks深拷贝后无法保留视图状态
react hooks深拷贝后无法保留视图状态
|
20天前
|
前端开发 开发者 UED
数据校验的艺术:揭秘JSF如何将前端与后端验证合二为一,打造无缝用户体验
【8月更文挑战第31天】JavaServer Faces(JSF)是构建企业级Web应用的Java规范,提供了丰富的组件和API,便于快速搭建用户界面。JSF验证框架基于JavaBean验证API(JSR 303/JSR 380),利用注解如`@NotNull`、`@Size`等在模型类上定义验证规则,结合前端的`<h:inputText>`和`<h:message>`标签展示错误信息。
23 0

热门文章

最新文章