首页
学习
活动
专区
圈层
工具
发布

(译) 如何使用 React hooks 获取 api 接口数据

原文地址:robinwieruch 全文使用意译,不是重要的我就没有翻译了 在本教程中,我想向你展示如何使用 state 和 effect 钩子在React中获取数据。...使用 React hooks 获取数据 如果您不熟悉React中的数据提取,请查看我在React文章中提取的大量数据。...我们只想在组件第一次加载的时候获取数据 ,这也就是为什么你可以提供一个空数组作为 useEffect 的第二个参数以避免在组件更新的时候也触发它。当然,这样的话,也就是在组件加载的时候触发。...目前我们已经通过组件第一次加载的时候获取了接口数据。但是,如何能够通过输入的字段来告诉 api 接口我对那个主题感兴趣呢?(就是怎么给接口传数据。...我之前已经在这里写过关于这个问题的文章,它描述了如何防止在各种场景中为未加载的组件中设置状态。

31.2K20

用惰性加载优化 React 程序

惰性加载是一种优化 Web 应用和移动应用的旧技术。非常直截了当 —— 如果在某一时刻资源没有被查看或需要,就不要渲染它们。例如,如果我们有一个要显示的文章列表,开始时应该只渲染视口上的内容。...所以先生成一些虚拟数据。在我们项目的 src 文件夹中创建一个名为 data.js 的文件。...我刚从这个URL https://jsonplaceholder.typicode.com/posts 复制粘贴了一些 json 响应。你也可以创建自己的虚拟数据。...但是由于当前的内容是文本,除非我们检查并看到 DOM 从 loading 转换为 loaded 时的变化,否则效果很难实现。 为了使延迟加载效果更加明显,让我们在列表中合并图像。...插入图像后的效果 正如我之前所说,图像是网页的数据饥饿组件,在这里我们正在为每个文章加载图像。虽然整个组件是延迟加载的,并且图像也加载了组件,但图像加载有点慢,而且不是那么顺利。

3.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实战 React 18 中的 Suspense

    在 React 18 中,虽然仍然可以使用useEffect来完成一些事情,如使用 API 接口读取的数据填充状态,但实际上不应该将其用于此类目的。...}> 上面的代码将会包裹一个组件,这个组件从某些数据源中加载数据,并在完成数据获取之前显示fallback。...集成,并且它的真正工作只是“在加载时显示这段代码,而在完成后显示那段代码”,仅此而已。...举个例子 来看一个简单的例子,我们只需创建一个组件来获取API中的某些数据,并且希望在准备好后渲染该组件。...结论 长时间使用useEffect以实现相同的结果后,当我第一次看到 Suspanse 这种用法时,我对这种新方法有些怀疑。包装获取库的整个过程有点让人生疑。

    1.2K10

    在 React 应用中获取数据

    这篇教程中,你将会学到如何在 React web 应用中获取数据并显示。这很重要。 在整个 React 组件中有几个地方都可以获取远程数据。何时获取数据是另外一个问题。...我不推荐这么操作。 数据更新频率 在 componentDidMount() 方法中初始化数据是很合理的,但是,我需要经常更新数据。基于 REST API,只有通过轮询的方式解决。...加载数据延迟的处理 有时候加载数据会花费很长时间。在这种下,显示一个进度条或者一个醒目的动画让用户知道程序正在处理,这对用户体验有很大的帮助。...当用户在初始化数据的时候(比如:点击搜索按钮)这很重要。 在演示 app 中,当请求时数据时我简单的显示一条提示信息:“请求数据中...”。...你学到了如何在 React 组件中异步加载数据。

    12.4K20

    第八十六:前端即将或已经进入微件化时代

    如果你提供的数据图表能让人做出更有效的决策,那么我觉得它就是一个成功的图表,否则它仅仅是一个看起来很酷很美的东西,除了浪费大家的制作时间,并没有带来什么本质的改变。...每当组件第一次装载时,React将自动卸载和重新装载每个组件,并在第二次装载时恢复以前的状态。如果这打破了我们的应用程序,考虑移除严格的模式,直到我们可以修复组件以恢复现有状态的弹性。...(悬念*我个人理解为尚未加载到界面中的内容)如果组件在完全添加到树之前挂起,React将不会在不完整状态下将其添加到树中,也不会激发其效果。...当树重新挂起并恢复为回退时,React现在将清除布局效果,然后在边界内的内容再次显示时重新创建它们。这解决了一个问题,即当与未加载的组件一起使用时,组件库无法正确测量布局。 新的JS环境要求。...有了这些API,未来的前端微服务更多的会采用组件化的形式,通过div的id标识进行加载和卸载。

    4K10

    万物皆可快速上手之Electron(第一弹)

    /browser-window#event-ready-to-show // 在加载页面时,渲染进程第一次完成绘制时,如果窗口还没有被显示,渲染进程会发出 ready-to-show 事件 。...但你一定会对上面用到的一些api有疑惑,下面我将带大家深入浅出的了解一下electron的常用概念和api。 相关概念 Electron 的进程分为主进程和渲染进程。...这里一般会通过区分环境加载对应不同的文件。 进程间的通信 在计算机系统设计中,不同的进程间内存资源都是相互隔离的,因此进程间的数据交换,会使用进程间通讯方式达成。...然而因为 API 设计目的仅仅是为了前端窗口间简单的数据传输,大量以及频繁的数据通讯会导致应用结构松散,同时传输效率也值得怀疑。...但这远远还不够,下一节我会讲一下如何将Electron与React完美融合,毕竟还是要更贴近业务的~ 好了,不早了,我要去开启我的网易云时光了 ? ?

    1.7K10

    探索 React 状态管理:从简单到复杂的解决方案

    引言React状态管理在构建动态和交互式的Web应用程序中扮演着至关重要的角色,如果你想在React中工作,了解它是非常重要的,实际上是最重要的事情。...当单击增量或减量按钮时,我们使用dispatch函数分派相应的动作。利用React Query进行服务器状态管理对于涉及服务器端状态管理(如数据获取和缓存)的情景,我们引入React Query。...它返回一个包含数据、isLoading和isError等属性的对象,用于处理加载和错误状态。我们使用useMutation钩子使用postData函数处理POST请求。...在handleSubmit函数内部,我们调用mutation.mutateAsync以向服务器发送新数据对象。我们呈现数据和一个提交按钮。在加载时,我们显示加载消息;如果有错误,我们显示错误消息。...通过这个设置,React Query处理了服务器状态、缓存和数据获取的管理,使得更容易在React组件中跟踪、更新和显示服务器数据。

    2.8K31

    React 19 可能会让你的网站变得更慢!

    Suspense 是一个 React 组件,可以让网站在一个需要异步加载的组件渲染完成之前显示一个备用组件(一般用来显示 Loading 组件)。...API 的一部分已经有一段时间了,但很长一段时间以来,它的唯一官方推荐的用法是使用 React.lazy 来进行组件懒加载,这对于拆分代码并在需要时仅加载拆分的部分组件非常有用。...当与 React.lazy 一起使用时,当第一次尝试渲染懒加载的组件时(即在懒加载之前),它将触发 Suspense boundary(即包裹组件的 Suspense)并渲染 fallback 组件,直到获取组件的代码完成了...截至目前(React 18.3.1),当我们使用支持 Suspense 的数据获取或在同一 Suspense boundary 内使用多个组件进行延迟加载时,React 将在退出渲染之前尝试渲染所有同级的组件...这并不是社区第一次对 React 中引入的更改提出抵制了,React 的很多改动都没有过多考虑 在 Meta 和 Vercel 之外的社区是如何使用的。

    37210

    【React】1935- 来看看 SWR 如何用 React Hook 实现优雅请求

    当新的请求结束,得到响应数据后,如果它与第一次请求的响应值不同,那么 SWR 就会直接更新 state ,这样你的 UI 也会渲染上最新的数据了。...当我们加载表格时,我们会发送请求以获取表格需要的数据,在请求的过程中我们可能会展示一个加载动画或者骨架屏。...对于用户来说就是我点击了删除后,那条数据直接消失了,而且还避免了表格在 有数据的情况与加载动画切换时 组件会快速闪一下的问题。...isValidating: 这里额外提一点,如果你不想在表格每次加载都展示加载动画,比如只有在请求实践超过了 500ms 才响应时展示加载动画,你可以通过防抖来实现: import { Center,...但是如果我们将控制弹窗是否显示的判断从 Modal 组件移到 Page 中,如下所示: const Page = () => { const { data } = useSwr( "/api

    2.2K10

    使用antd表格组件实现日程表

    /lib 我们需要把react相关代码写在text/babel标签中,如下所示,我们打印antd和react看看是否有值。...日程内容单元格的内容如果为空时,需要将单元格进行合并,显示一个增加图标,点击增加图标后,打开系统的弹窗进行增加操作,操作完成后,渲染内容至刚才点击的单元格。...image-20201119172808318 然而,事情没有预想中那么顺利,我页面做好后,到开发周期的最后一天下午,后端把接口给我了,但返回的数据不是我预想的格式,我又进行了二次处理,页面渲染出来后,...,里面的函数会失效没法执行,由于我需要自定义antd的表格,在json数据中包含了函数,因此我不能使用这个方法。...触顶/触底加载数据 由于业务需要,不能使用antd的分页功能,需要实现触顶向前加载30条数据,触底向后加载30条数据。总共只能加载3个月的数据。

    4.2K20

    React 中请求远程数据的四种方法

    React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...但是这个示例忽略了加载状态,错误处理,声明和设置相关状态等。在现实世界中, HTTP 调用看起来更像这样。...service 是最流行的术语,我在下面也讨论了很多好的替代名称,如 client 或 api。 要点是,所有的 HTTP 调用都是通过纯 JavaScript 函数处理的,存储在一个文件夹中。...其思想是这样的:当相关函数一起处理时,更容易一致地处理它们。如果 userService 文件夹中充满了进行 HTTP 调用的函数,那么我可以很容易地确保它们始终如一地这样做。...你想在用户重新调整标签时重新获取新数据吗?如何消除重复查询? 你可以不断完善这个自定义Hook来完成所有这些操作。

    4.5K10

    深入探讨 Web 开发中的预渲染和 Hydration

    单页面应用程序(SPA)是一种网络应用程序的实现方式,它只加载一个单一的网络文档,然后当需要显示不同的内容时,通过诸如 Fetch 等 JavaScript API 来更新该单一文档的主体内容。...我们现在可以部署专门的服务器,专注于通过 API 提供数据服务。我们可以轻松地进行水平扩展。...它加载使我们的应用程序具有交互性的 JavaScript。 在 React 中,“Hydration”是 React 如何“附着”到已经在服务器环境中由 React 渲染的现有 HTML 上。...那是因为 JavaScript 没有加载,所以用户无法与之交互。 Hydration 的心智模型 在编译时的第一次渲染,生成所有静态的非个人内容,并在动态内容将出现的地方留下空位。...然后,在 React 应用程序在用户设备上挂载后,第二次渲染会填入所有依赖于客户端状态的动态部分 总结: 预渲染和 Hydration 框架工作时的潜在错误及解决方法 第一次传递:我们看到预渲染的

    2K10

    为什么React开发者集体掉进了状态管理的陷阱

    去年我接手一个项目,第一次Code Review时,我看到这样的代码:一个简单的数据列表组件,却有5个useState、3个useEffect嵌套依赖,还附赠一个isMounted标志位来防止内存泄漏。...大多数React开发者会用useState来存放API数据,这就是问题的根源。...优雅降级:失败时自动重试,重试失败后能优雅地显示错误 乐观更新:修改数据时立即在UI上反馈,等服务端确认后再验证 这些功能完全超出了useState+useEffect的能力范围。...切换分类后数据会闪现加载中,即使新数据已经被请求过 // 3. 如果用户离开Tab又回来,数据不会自动刷新 // 4....它能让你: 从30行错误容易代码降低到5行可靠代码 从「我得考虑缓存、竞态、重试」转变到「框架替我考虑这些」 从事后debug改到事前防御 最后一个建议:如果你的项目还在用useState来存放API数据

    23610

    React 中请求远程数据的四种方法

    React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...但是这个示例忽略了加载状态,错误处理,声明和设置相关状态等。在现实世界中, HTTP 调用看起来更像这样。...service 是最流行的术语,我在下面也讨论了很多好的替代名称,如 client 或 api。 要点是,所有的 HTTP 调用都是通过纯 JavaScript 函数处理的,存储在一个文件夹中。...其思想是这样的:当相关函数一起处理时,更容易一致地处理它们。如果 userService 文件夹中充满了进行 HTTP 调用的函数,那么我可以很容易地确保它们始终如一地这样做。...你想在用户重新调整标签时重新获取新数据吗?如何消除重复查询? 你可以不断完善这个自定义Hook来完成所有这些操作。

    2.7K30

    为什么说Suspense是一种巨大的突破?

    相反,我想更多地关注Suspense对应用程序开发人员的影响,就像我们如何考虑应用中的加载状态和架构一样。...去年,Dan Abramov在JSConf冰岛提出Suspense,在处理React应用程序中的异步数据获取时,Suspense被认为是一种提升开发者开发体验的巨大改进。...为此,我们使用某种形式的缓存来存储数据,在每次渲染时,我们通过这个缓存来确定数据是否已经可用(然后它只是从变量中读取它), 在这种情况下它会触发fetch,并抛出Promise的结果来让React捕获。...借助React 16中的“新”Context API,我们获得了另一个很棒的工具,可帮助我们在全局级别定义和公开数据,同时使其可以在深层嵌套的组件树中轻松访问。...在解析Promise之前,它将获取的数据存储在它用于缓存的任何内容中,这样当React触发重新渲染时,一切都复用。

    2.1K30

    【React】2054- 为什么React Hooks优于hoc ?

    然而,这两个版本的HOC都显示了在使用HOC时出现属性混乱的问题。通常情况下,属性只是通过使用展开运算符传递给 HOC,而且仅在 HOC 本身中部分使用。...这里有很多问题需要回答: 即使其中一个请求提前完成,加载指示器是否仍会显示? 如果只有一个请求失败,整个组件会作为错误渲染吗? 如果一个请求依赖于另一个请求会发生什么?...此外,当两个请求不同时完成时,一个数据条目可能为空,而另一个可能已经存在…… 好了。我不想在这里进一步解决这个问题。...只有在用户仍在加载时才提前返回一个加载指示器,然而,如果用户已经存在,只有用户配置文件是挂起的,我们只会部分地渲染一个加载指示器,其中数据丢失了(这里也是由于组件组合的强大)。...因此,我的建议是改用 React Hooks。

    93600

    useLayoutEffect的秘密

    阻塞渲染 在浏览器中,阻塞渲染是指当浏览器在加载网页时遇到阻塞资源(通常是外部资源如样式表、JavaScript文件或图像等),它会停止渲染页面的过程,直到这些资源被下载、解析和执行完毕。...「延迟加载」:将不是立即需要的资源推迟加载,比如在页面滚动到特定位置或用户执行某些操作时再加载。...还是沿用第一次渲染全部元素,但是设置这些元素不可见(不透明度设置为 0/或者在可见区域之外的某个地方的某个 div 中呈现这些元素),然后在计算后再将那些满足条件的元素显示出来。...因此,我们在浏览器显示我们的页面之前在“第一次通过”阶段渲染的内容就是在我们组件中渲染的内容:所有按钮的一行,包括“更多”按钮。...我们可以向他们显示一些“加载”状态而不是菜单。或者只显示一两个最重要的菜单项。或者甚至完全隐藏项目,并仅在客户端上渲染它们。这取决于你。

    2.8K10

    写给vue转react的同志们(1)

    首先我们要弄清做业务需要什么知识点去支持 今天的主题: react 是怎么样传输数据的 react 怎么封装组件 react 的生命周期 实际上vue熟练的同学们,我觉得转react还是比较好上手的,就是要适应他的纯...列举比较常用的: constructor() constructor()中完成了React数据的初始化,它接受两个参数:props和context,当想在函数内部使用这两个参数时,需使用super()传入这两个参数...它代表的过程是组件已经经历了constructor()初始化数据后,但是还未渲染DOM时。...这个相当于vue的created啦,vue中可以通过在这个阶段用$nextTick去操作dom(不建议),不知道react有没有类似的api呢?...从vue转react还是比较好上手的(react中还有函数式写法我没有说,感兴趣可以看看),个人认为弄清楚数据通讯以及生命周期对应的钩子使用场景等,其实基本就差不多啦。

    1.1K20

    前端老牌框架衰退,IMVC(同构 MVC)成未来趋势?

    其次第一次打开网页时不必等待JS 加载完成才能看到内容,页面的交互也能够得到即时响应,这就是速度上的优势。同构的运用使得服务端和客户端都使用同一套代码,有效的降低了维护成本。...让NodeJS去接管渲染层,后端部分向后再退一层,只负责数据持久化以及提供Restful API。...Create-app的配置理念 由于客户端模块是异步加载而服务端是同步加载,要想在他们之间做到平衡就需要实现一个Create-app的配置。...如何处理 css 按需加载 问题根源:浏览器只在 dom-ready 之前会等待 css 资源加载后再渲染页面 问题描述:当单页跳转到另一个 url,css 资源还没加载完,页面显示成混乱布局 处理办法...:将 css 视为预加载的 ajax 数据,以 style 标签的形式按需引入 优化策略:用 context 缓存预加载数据,避免重复加载 如何实现代码切割、按需加载 不使用webpack-only 的语法

    1.7K20

    如何升级到 React 18发布候选版

    首先,这修复了 API 在运行更新时的一些工程学问题。如上所示,在 Legacy API 中,你需要多次将容器元素传递给 render,即使它从未更改过。...如果你想在 hydration 后再次更新 root,你可以将它保存到一个变量中,就像使用 createRoot 一样,然后调用 root.render(): import * as ReactDOM...例如,当用户选项卡远离屏幕并返回时,React 应该能够立即显示前一个屏幕。为此,React 将使用与前面相同的组件状态卸载和重新挂载树。...为了帮助表面这些问题,react 18 引入了一个新的开发-只检查严格模式。每当一个组件第一次挂载时,这个新的检查将自动卸载和重新挂载每个组件,恢复第二次挂载时以前的状态。...配置你的测试环境 当您第一次更新,使用了 createRoot 时,您可能会在控制台中看到这个警告: The current testing environment is not configured

    2.7K20
    领券