首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

原文地址:robinwieruch 全文使用意译,不是重要我就没有翻译了 在本教程,我想向你展示如何使用 state 和 effect 钩子在React获取数据。...但是,这样就会出现了另一个问题:每一次query 字段变动都会触发搜索。如何提供一个按钮来触发请求呢?...在我们例子,数据,加载和错误状态初始状态参数没有改变,但它们已经聚合到一个由 reducer hook 不是单个state hook 管理状态对象。...毕竟,我们只有三个状态转换:初始化提取过程,通知成功数据提取结果,并通知错误数据提取结果。 在我们自定义 hook ,state 像以前一样返回。但是因为我们有一个状态对象不是独立状态。...由于Axios Cancellation在我看来并不是最好API,因此这个防止设置状态布尔标志也能完成这项工作。 完

28.4K20

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

前言 如果你是一名经验丰富 react 开发者,那么你肯定有遇到过以下几种情况: 请求库封装复杂,手动实现各种缓存验证去重逻辑,还需要维护请求加载或错误状态 由于组件重复渲染导致 重复请求 用户将网站长时间挂在后台导致缓存...当然封装方式是五花八门。 而在 SWR ,它本身自带了 错误重试 功能,当出现请求错误时,SWR 使用 指数退避算法[3] 重发请求。...,不是使用 hook 方式获取,这种方式也可以用来实现预请求数据。...这里需要注意一下,在 React 官方文档中提到了 hooks-rules[4] : 不要在循环,条件或嵌套函数调用 Hook, 确保总是在你 React 函数最顶层以及任何 return 之前调用他们...这个规则其实与上述例子没有太大关联,React 文档规则是为了 避免 state 混乱,上面的例子则是告诉大家 调用 useSWR 要尽量在同一个时机以避免重复请求 ,大家不要混淆了。

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

React学习笔记(三)—— 组件高级

React , 始终是一个非受控组件,因为它值只能由用户设置,不能通过代码控制。...错误边界是用于捕获其子组件树 JavaScript 异常,记录错误并展示一个回退 UI React 组件,不是整个组件树异常。...回调函数) 服务端渲染 错误边界自身抛出来错误不是其子组件) 当render()函数出现问题时,componentDidCatch捕获异常并处理 此时,render()函数里面发生错误,则...,componentWillMount执行两次,一个在服务器端,一次在浏览器端,componentDidMount能保证在任何情况下只会被调用一次,从而不会发送多余数据请求。...服务器端使用Spring Boot: 接口提供JSON数据: http://localhost:8081/api/students  前后端分离,前端使用React+Axios从服务器获取数据,展示学生信息

8.2K20

前端异常捕获与处理

try { // 可能导致错误代码 } catch (error) { // 在错误发生时怎么处理 } 如果 try 块任何代码发生了错误,就会立即退出代码执行过程,然后执行 catch...} finally { return "做作业"; } return "睡觉"; } 表面上调用这个函数返回 "出去玩",因为返回 "出去玩" 语句位于 try 语句块执行此语句又不会出错...JS 代码错误 下面为我司内部错误监控平台一次日常报错调用堆栈截图: 错误还是比较明显,this 指向导致问题。...因为 React 组件是声明性,所以 try-catch 不是一个可靠选项。为了弥补这一点,React 实现了所谓错误边界。...(axios.js:1037) 可以看出来 axios 异常可以当做 Promise 异常来处理: // 请求 axios.get("http://localhost:3000/api/uitest

3.3K30

axios

2️⃣ 处理错误麻烦,只有网络错误才会reject(promiseapi),Http状态码404、500不会被标记为reject 3️⃣ 不支持取消一个请求以及查看请求进度。...我们可以看到index.js也并没有写具体代码,而是因我那个了lib下axios 我们看一下 axios.js文件 可以看到我们axios通过createInstance创建实例,在创建实例...获取错误信息 在使用Promisethen() API时候,我们是可以再通过catch API 获得错误异常。那么 async await这种写法怎么获得错误异常呢?...// 它可以通过设置一个 `baseURL` 便于为 axios 实例方法传递相对 URL baseURL: 'https://some-domain.com/api/', // `transformRequest...request对应请求request对象 配置默认值 全局 axios 默认值 可以写到index.js axios.defaults.baseURL = 'https://api.example.com

4K10

如何解决前端常见竞态问题

简单来说,它出现原因是无法保证异步操作完成按照他们开始时同样顺序。 举个,有一个分页列表,我们快速地切换第二页,第三页。...所以我们在处理请求错误时,需要判断 error 是否是 cancel 导致,与常规错误区分处理。...但是如果每次都需要手动调用导致项目中相同模板代码过多,偶尔也可能忘记 cancel。 我们可以基于指令式 promise 封装一个自动忽略过期请求高阶函数 onlyResolvesLast。...但是取消请求也依赖底层请求 API,比如 XMLHttpRequest 需要用 abort, fetch APIaxios 需要用 AbortController。...「忽略」更通用 「忽略」方式,不依赖请求 API,更加通用,更容易抽象和封装。本质上所有的异步方法都可以使用 onlyResolvesLast 来忽略过期调用

1.7K10

万万没想到react请求数据花样如此之多

接触react一个星期,也慢慢熟悉了一些概念,比如HOC(高阶组件)、jsx、函数式组件、HOOK,感觉react也没有别人说学习曲线陡峭,难上手等等,给我感觉,如果你Vue,上手React真的非常快...引入axios请求网络数据,将请求放入useEffect import React, { useState, useEffect } from 'react'; import axios from '...{ const result = await axios( 'https://hn.algolia.com/api/v1/search?...; return [{ data, isLoading, isError }, setUrl]; } 后面你知道了useReducer,你发现,loading,error这些状态应该交给他来做,不是通过...是不是和移动客户端开发灰常像,页面的destory时候,如果网络请求presenter还持有页面的context,那么页面将释放不掉,造成内存泄漏不说,还会导致在页面执行destory之后,网络数据回来

1.3K81

React】945- 你真的用对 useEffect 了吗?

通过使用这个 Hook,你可以告诉 React 组件需要在渲染后执行某些操作。React 保存你传递函数(我们将它称之为 “effect”),并且在执行 DOM 更新之后调用它。...Hook 使用了 JavaScript 闭包机制,不用在 JavaScript 已经提供了解决方案情况下,还引入特定 React API。 useEffect 会在每次渲染后都执行吗?...不仅请求后端数据,还会通过调用setData来更新本地状态,这样触发view更新。...在我们例子,data,loading和error状态初始值与useState创建时一致,但它们已经整合到一个由useReducer创建对象,不是多个useState创建状态。...在自定义hooks末尾,state像以前一样返回,但是因为我们拿到是一个状态对象,不是以前那种分离状态,所以需要将状态对象解构之后再返回。

9.6K20

前端系列第5集-Vue系列

在Vue.js, data 属性是一个函数不是一个对象,因为每个组件都应该拥有自己独立数据副本,不是共享同一个数据对象。...如果一个已经存在节点需要被移动到列表另一个位置,Vue.js可以通过比较新旧节点key值来判断是否需要移动这个节点,不是销毁旧节点并重新创建一个新节点。...但是,当数据源元素发生变化时,如果没有提供恰当key值,可能导致Vue.js出现性能问题,因为它可能错误地重新渲染整个列表。...这可以通过递归遍历差异对象并调用相应DOM API来完成。例如,我们可以编写一个名为"patch"函数,该函数根据差异对象更新实际DOM树。...发送请求 调用Axios实例request()方法或者get()、post()等快捷方法来发送HTTP请求。

15520

React学习(九)-React中发送Ajax请求以及Mock数据

撰文 | 川川 前言 在React,render函数返回结果,取决于组件props和state 我们都知道UI页面上数据不是写死,往往是从后端数据接口中拿到 然后将真实数据填充到页面上...= 'http://localhost:4000/api/goodlist'; // 这种方式是使用代理方式,这里用是mockoon工具 // this.baseUrl = 'https:...,webpack做了一些处理,react自动找到这个目录 方式二:使用浏览器内置fetch方法 该方法是浏览器标准一个接口,提供了一种简单合理方式来跨网络异步获取资源数据,现在也是越来越流行使用...,与axios有些区别,不是用catch()去捕获错误,因为使用catch去捕获异常会掩盖掉组件本身可能产生bug (error) => { console.log(error...是会报错 换而言之,假数据放置在public目录下,不使用charles等其他代理工具,也能成功,因为在Reactwebpack自动帮你处理了,自动找到public目录下文件 当然除了charles

4.7K31

React基础(9)-React中发送Ajax请求以及Mock数据

image.png 前言 在React,render函数返回结果,取决于组件props和state 我们都知道UI页面上数据不是写死,往往是从后端数据接口中拿到 然后将真实数据填充到页面上...= 'http://localhost:4000/api/goodlist'; // 这种方式是使用代理方式,这里用是mockoon工具     // this.baseUrl = 'https:...,webpack做了一些处理,react自动找到这个目录 方式二:使用浏览器内置fetch方法 该方法是浏览器标准一个接口,提供了一种简单合理方式来跨网络异步获取资源数据,现在也是越来越流行使用...,与axios有些区别,不是用catch()去捕获错误,因为使用catch去捕获异常会掩盖掉组件本身可能产生bug      (error) => {         console.log(error...,假数据放置在public目录下,不使用charles等其他代理工具,也能成功,因为在Reactwebpack自动帮你处理了,自动找到public目录下文件 当然除了charles还有mockoon

2.1K30

Axios是什么?用在什么场景?如何使用?

说到get、post,大家应该第一时间想到就是Jquery吧,毕竟前几年Jquery比较火时候,大家都在用他。但是由于Vue、React等框架出现,Jquery也不是那么吃香了。...也正是Vue、React等框架出现,促使了Axios轻量级库出现,因为Vue等,不需要操作Dom,所以不需要引入Jquery.js了。 ?...// 它可以通过设置一个 `baseURL` 便于为 axios 实例方法传递相对 URL baseURL: 'https://some-domain.com/api/', // `transformRequest...// (e.g. https://www.npmjs.com/package/qs, http://api.jquery.com/jquery.param/) paramsSerializer...https.Agent({ keepAlive: true }), // 'proxy' 定义代理服务器主机名称和端口 // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据

4.7K10

如何更好react 中使用 axios 拦截器

我之前在 react 处理 axios 封装一直没有找到很好方式,因为 axios 是非常独立,并且提供各种 api 都是一次性配置,例如 axios.create、axios.defaults...你并不是那么容易就能在 axios 随心使用 react,反之亦然。...但是 在 react axios不是完全作为第三方工具,它拦截器应该被定义为服务,即 react 副作用代码。...在 react 活了过来,拦截器实时把请求记录在 react 上下文中,我们可以在 react 任意地方调用日志上下文查看请求日志。...在默认页面 DefaultPage 组件,我们可以进行一次错误请求,请求返回给我们 404 状态码,现在我们需要在 axios 中进行拦截,当请求出现 404 时,跳转到 /404 页面。

2.4K30

【总结】2020- 前端常用几种请求方式

取消请求不够优雅:虽然 XMLHttpRequest 支持通过 abort 方法取消请求,但这并不是一个优雅解决方案,因为它会导致请求被突然终止。...内置错误处理:当网络请求出现问题时,Fetch API 返回一个带有错误状态 Promise,可以方便地使用 .catch() 方法进行处理。...错误处理不够直观:Fetch API 不会将 HTTP 状态码为 4xx 或 5xx 响应视为错误,这意味着你需要在 .then() 方法手动检查响应状态。...上传进度监控:Fetch API提供上传进度监控, XMLHttpRequest 支持。 最佳使用场景:现代浏览器,需要简洁语法和链式调用场景。...客户端支持防御 XSRF:Axios 提供了防御 XSRF(跨站请求伪造)功能。 错误处理:Axios 提供了统一错误处理机制,当请求失败时,会在 .catch 捕获到错误

25510

React 设计模式 0x6:数据获取

Axios 是一个基于 Promise node.js 和浏览器 HTTP 客户端。...GraphQL 提供API 数据完整且易于理解描述,使客户端能够精确地请求所需数据,避免了不必要数据传输,使得 API 能够随着时间推移更容易地发展,并提供了强大开发者工具。...GraphQL 查询总是返回可预测结果,使用 GraphQL 应用程序速度快且稳定,因为它们控制获取数据,不是由服务器来控制。...# Memoization Memoization 是一种优化技术,主要用于通过存储昂贵函数调用结果,并在再次出现相同输入时返回缓存结果来优化计算机程序。...在 React ,我们可以通过以下两种方式实现 Memoization: useMemo React 提供了一个内置钩子函数 useMemo 允许您对耗费性能函数进行记忆化,以避免在每次重新渲染时调用它们

1.2K20

React + TypeScript + Hook 带你手把手打造类型安全应用。

社区里有很多TypeScript比较基础分享,但是关于React实战还是相对少一些,这篇文章就带大家用React从头开始搭建一个TypeScripttodolist,我们目标是实现类型安全,杜绝开发时可能出现任何错误...const [todos, setTodos] = useState([]); 复制代码 当然,useState也是具有泛型推导能力,但是这要求你传入初始值已经是你想要类型了,不是空数组...: Payload)参数,url参数和泛型U建立了关联,这样我们在调用axios函数时,就会动态根据传入url来确定上下文中U类型,接下来用Payload把U传入Payload工具类型...: Payload): Promise> | never 复制代码 是不是就清楚很多了,传入不同参数推断出不同payload入参,以及返回值类型。...而且TypeScript也可以在开发时就避免很多粗心导致错误,详见: TypeScript 解决了什么痛点?

1.8K10

React 应用获取数据

在教程结束后,你清楚知道 React 该如何获取数据,不同方法利弊和如何在 React 应用中使用这些技术。...这篇教程重点不是它,它可以提供远程 API 用来演示如何在 React 获取数据。...因为我希望数据一直是最新,所以,以轮询方式通过 REST API 获取远程数据。 但是,初始化数据也非常重要。React 组件生命周期方法允许你在特定时间执行你需要业务逻辑。...大多数可扩展服务都会提供方法检查 HTTP if-modify-since 和 eTag 判断数据是否有更新。...我们也提到了相关生命周期方法、轮询、进度条和错误处理。 我们也了解到两个基于 promise 库:fetch APIaxios.js。现在,你可以构建自己 React 应用了。

8.4K20
领券