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

使用React-Query解决接口请求的麻烦事

return } 这是一个组件拉取服务端数据的简单例子,组件中,我们简单拉取了一个接口的数据,并监听接口的状态,根据状态来更新不同的UI。...其中defaultOptions用于配置项目中useQuery请求的管理,常用的配置如下: staleTime: 重新获取数据的时间间隔 默认0 cacheTime: 数据缓存时间 默认 1000 60...5 5分钟 retry: 失败重试次数 默认 3次 refetchOnWindowFocus: 窗口重新获得焦点重新获取数据 默认 false refetchOnReconnect: 网络重新链接...refetchOnMount: 实例重新挂载重新拉取请求 enabled: 如果为“false”,“useQuery”不会触发,需要使用其返回的“refetch”来触发操作 queryFn:全局定义请求方法...key值,也可以在数组中,写入多项如:['repoData', '1'],这样React-Query使用的时候会自动把它拼接为/repoData/1,这个缓存用户访问过的页面,非常有用。

71130

react-query从拒绝到拥抱

react-query是一位数据获取专家,能够智能管理请求的一切内容,包括数据、状态、缓存,更新等,基于Hooks。...; if (isErr) return 重新获取数据; return react-query...为了进一步增强应用和体验,比如网络错误自动重试,为了防止用户看到的是旧的数据,你需要增加窗口焦点重新自动获取数据等,可以看出如此发展下去,组件需要管理的状态越来越多,你也会越来越力不从心,状态的增多,...Query Invalidation 你所用的query有时需要刷新以重新获取最新数据,这时候你就可以用QueryClient的来使某个query失效,然后该query就会重新获取数据。...//true表示数据获取的路上 error,//错误对象,如果存在则包含相关的错误信息 refetch,//这个还挺实用的,你可以需要的地方或需要更新数据时调用,则会触发这个请求,比如

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

react-query解决你一半的状态管理问题

用户交互的中间状态 服务端状态 陈年的老项目中,通常用Redux、Mobx这样的「全局状态管理方案」无差别对待他们。...「缓存」的性质不同于「状态」 不同于交互的中间状态,服务端状态更应被归类为「缓存」,他有如下性质: 通常以「异步」的形式请求、更新 「状态」由请求的数据源控制,不由前端控制 「状态」可以由不同组件共享...你可以从这里[2]看到他们的区别 初识React-Query React-Query是一个基于hooks的数据请求库。...不仅如此,React-Query还为我们做了如下工作: 多个组件请求同一个query只发出一个请求 缓存数据失效/更新策略(判断缓存合适失效,失效后自动请求数据) 对失效数据垃圾清理 数据的CRUD由...这样,React-Query就会重新请求userData对应query的数据。 总结 通过使用React-Query(或SWR)这样的数据请求库,可以将服务端状态从全局状态中解放出来。

2.6K10

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

React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...内联写法 集中管理 自定义 Hook react-query/swr 注意:本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类的替代方法。... React 组件中进行 HTTP 调用并处理响应。 fetch("/users").then(response => response.json()); 看起来很简单。...、如果客户端的连接不可靠,如何重新获取?你想在用户重新调整标签重新获取数据吗?如何消除重复查询? 你可以不断完善这个自定义Hook来完成所有这些操作。...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。

2.3K30

React Query 指南,目前火热的状态管理库!

请注意数据也可能为 undefined;这是因为第一次调用时,当请求处于等待状态,data 尚未呈现。 isLoading:这个标志表示 React Query 正在加载数据。...使用 QueryClient,你可以使已经提供的查询失效,并告诉 React Query 重新请求数据,因为你可以确保突变之后,那些数据还不是有效的。...你可以从库中导入该 hook 并在组件中使用。该 hook 仅返回一个布尔值,表示应用程序中是否存在一个或多个获取请求。因此,你可以根据这些数据决定是否显示加载器。Easy peasy!...它仅在条件process.env.NODE_ENV === 'development'为 true 才渲染该组件。 如果需要,你可以自定义该组件或强制在生产模式下渲染它。...你也可以重置状态或删除部分状态以重新获取数据。 没错,它提供了许多很好的功能来调试和检查你的 React Query 应用程序,并且它是每个使用 React Query 的开发者的好工具。

3K42

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

React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...内联写法 集中管理 自定义 Hook react-query/swr 注意:本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类的替代方法。... React 组件中进行 HTTP 调用并处理响应。 fetch("/users").then(response => response.json()); 看起来很简单。...、如果客户端的连接不可靠,如何重新获取?你想在用户重新调整标签重新获取数据吗?如何消除重复查询? 你可以不断完善这个自定义Hook来完成所有这些操作。...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。

4K10

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

学习如何轻松构建可伸缩的 React 应用程序:数据获取 # React 中服务端数据获取的方式 大多数 React 应用程序中,应用程序需要来自 API 或服务器的数据才能正常运行。...大多数 React 应用程序中,通常需要计算数据或从 API 获取数据。...然而,当组件重新渲染,这些数据并不总是需要重新计算或重新获取。有几种方法可以 React 中实现数据缓存。...从 API 缓存的数据可以存储我们的状态管理中,然后我们的应用程序中全局使用。尽管数据被缓存,但在刷新页面,它将丢失数据,需要重新获取。...此外,您可以获取数据并将其存储 React 应用程序状态中。 # React Query React Query 是一个库,用于处理 React 应用程序中的数据获取和管理。

1.2K20

React 应用架构实战 0x5:集成 API 到应用中

之前,了解了如何设置模拟 API,而在本节中,将学习如何通过应用程序消费 API。当我们提到 API ,指的是 API 后端服务。...我们将学习如何在客户端和服务器上获取数据,对于 HTTP 客户端,我们将使用 Axios,并使用 React Query 库来处理获取到的数据,它允许我们 React 应用程序中处理 API 请求和响应...,可以将数据 React 组件中使用。...,那么这样做是可以的,但在大多数情况下,我们需要从许多不同的地方获取数据。...我们可以看到这里有一定量的重复代码: 需要定义相同的data、error和 loading 状态 必须相应地更新不同的状态 数据我们离开组件立即被丢弃 如果使用 React Query,我们可以使用

1.5K20

React 应用架构实战 0x6:实现用户认证和全局通知

目前,当涉及到管理控制台中的用户身份验证,应用程序仍然依赖于测试数据本节中,我们将构建应用程序的身份验证系统,允许用户认证并访问受保护的资源管理控制台中。...除了响应数据之外,还将附加一个 httpOnly cookie,从此时起用于身份验证请求 每当用户进行身份验证,我们将从响应中的用户对象存储 react-query 缓存中,并使其对应用程序可用 由于身份验证是基于...cookie 的,带有 httpOnly cookie,因此我们不需要在前端处理身份验证令牌,任何后续请求都将自动包括令牌 调用 /auth/me 接口将处理页面刷新后的用户数据持久化,该接口将获取用户数据并将其存储相同的...,我们将使用 useUser hook 来获取用户数据: // src/layouts/dashboard-layout.tsx import { useLogout, useUser } from "...@/features/auth"; 另外, src/pages/dashboard/jobs/index.tsx 中,我们将使用 useUser hook 来获取用户数据: // src/pages

1.5K20

React-Query:啥都没干,就被淘汰了?

本质来说,这是个「数据/缓存同步」的问题,只不过SPA时代,这个问题刚好交给前端解决而已。 但是,后端天生离数据更近,解决这个问题更有优势。...所以,React-Query还是有用武之地。 类似的,全栈框架Next.js中,也推荐CSR(客户端渲染)使用同团队开发的缓存库SWR用于数据的同步操作。...把这个模型套在「数据同步」的场景: 之前,「数据同步」的逻辑主要发生在位于前端的React-Query中 现在,「数据同步」的逻辑发生在后端 既然「数据同步」的逻辑发生在后端,显然就不需要运行在前端的React-Query...而且,「序列化数据」方案还有个好处 —— 凡是能够序列化的模块,都能将逻辑放在后端执行。 虽然React Server Component直译叫服务端组件,看起来「最小可序列化」的模块应该是组件。...比如,如下Next.js代码中,AddToCart组件在前端渲染,addItem方法的逻辑是操作数据库的后端逻辑: import { cookies } from 'next/headers';

23820

React-Query:啥都没干,就被淘汰了?

本质来说,这是个数据/缓存同步的问题,只不过SPA时代,这个问题刚好交给前端解决而已。但是,后端天生离数据更近,解决这个问题更有优势。...所以,React-Query还是有用武之地。类似的,全栈框架Next.js中,也推荐CSR(客户端渲染)使用同团队开发的缓存库SWR用于数据的同步操作。...图片把这个模型套在数据同步的场景:之前,数据同步的逻辑主要发生在位于前端的React-Query中现在,数据同步的逻辑发生在后端既然数据同步的逻辑发生在后端,显然就不需要运行在前端的React-Query...图片而且,序列化数据方案还有个好处 —— 凡是能够序列化的模块,都能将逻辑放在后端执行。虽然React Server Component直译叫服务端组件,看起来最小可序列化的模块应该是组件。...比如,如下Next.js代码中,AddToCart组件在前端渲染,addItem方法的逻辑是操作数据库的后端逻辑:import { cookies } from 'next/headers'; export

42430

React 困境与未来,何时迎来自己的“Angular.js 时刻”?

数据获取不再依靠 useEffect 或者 react-query 实现;相反,我们需要在异步组件中使用 fetch: async function PlaylistFromId({ id }) {...如果我们需要在组件树中深入访问获取数据,由于于 useContext 已在服务端组件中被禁用 ,所以无法将 fetch 放置 React Context 当中。...现在若需要在组件树内的不同点处访问获取数据,推荐方法是必要执行重新获取,再通过 React 执行重复数据删除。 这个 fetch 函数还会默认缓存数据,无论响应缓存标头如何。...所以哪怕大家精通 React 开发,面对服务端组件还是得重新学习——除非您已经拥有丰富的 PHP 开发经验。...说实话,React 中的新功能大部分处于“Alpha”早期阶段,也许未来会在稳定版发布得到解决。 缺少开发生态系统 如前所述,现在我们没法用 react-query 进行数据获取

22310

为什么我不再用Redux了

它使我们能够全局范围内存储不可变数据,并解决了组件树中 prop-drilling 的问题。需要在应用程序之间共享不可变数据,它现在依旧是一种可以方便扩展的优秀工具。...现在,异步获取数据意味着数据必须位于两个位置:前端和后端。我们必须考虑如何在全局范围内以最佳方式存储这些数据,以便它们能对我们的所有组件都可用,同时保持数据缓存以减少网络延迟。...但是,同步缓存和保持状态是非常复杂的,因此我们不应该像 Redux 鼓励的那样,从头开始重新创建这个后端状态。 当我们开始在前端重新创建数据,后端和前端之间的职责界限很快就变得模糊不清。...、缓存和无效化,只是加载数据并在加载将其存储全局存储中而已。...React Query 和 SWR 大约是同一间开始开发的,并且以积极的方式相互影响。 react-query 文档中也对这两个库进行了彻底的比较。

2.6K20

Hooks + TS 搭建一个任务管理系统(三)-- 项目列表功能模块

forceRender 属性,这个属性可以控制是否强制渲染,这也是为了解决,我们刚打开组件未渲染导致报错的问题 同时我们也可以发现,我们在当中设置了三元判断,这样是为了优化我们的用户体验,前面也提过了...,我们整个项目采用的是 react-query 进行 url 管理,它的 API 中有能够返回 isLoading 状态的 hook 也就是我们的数据请求的完成状态,这也让我们可以利用这个 isLoading...实现编辑,创建功能 我们点击编辑按钮,首先需要弹出 modal 编辑信息点击保存后,才需要调用发送请求 上代码 首先先处理 modal 的显示和关闭 (截取下拉框的关键代码)我们点击编辑按钮,会触发...num 的高端操作,其实就是一个转化成 boolean 类型的方法 接着我们就可以 columns 中使用这个 Pin 组件了,星星状态改变时调用编辑方法,改变数据中的 pin 状态 {.../失败之后都进行重新查询更新状态 queryClient.getQueryData:获取缓存的旧值 queryClient.setQueryData:设置值 接下来我们来编写相应的 config ,那

1.2K30

Hooks + TS 搭建一个任务管理系统(一)-- 登录注册页面

dispatch(...args) : void 0), [dispatch, mountedRef]) } 当我们使用这个 hook ,将会接收到当前组件的状态,当组件被卸载后,我们就不需要再将数据返回了...queryClient.clear() }) // 当组件挂载,初始化 user useMount(() => { run(bootstrapUser...,当 error ,展示一个错误提示框 // 当组件挂载,初始化 user useMount(() => { run(bootstrapUser()) }) 组件挂载...,我们先检查是否存在 token 如果有,我们就对他进行自动登录 // 保持用户登录状态,组件挂载的时候就调用 const bootstrapUser = async () => { let...六、按钮触发函数执行 在编写完了前面的几个 custom hook 之后,我们已经将数据接口转到了 context 当中,因此我们调用里面的内容,只需要调用 useAuth 来解构出对应的数据即可

1.3K11

使用React Query做为axios请求库的上层封装

前言 项目中,通常都需要跟服务端进行异步的数据交互,基本都是用到axios这个库来做请求,嗯,毕竟拥有80k star,明星项目 接下来,我们来回顾下axios项目中的使用 以查询用户信息为例,我们会这样封装...另外,现在的前端项目特别是单页面应用,会使用Flux、Redux、Mobox等状态管理库,会把组件间共享的数据都存放在状态管理库中,这些可以分为两类,一类是用户交互的中间状态,比如isLoading,isClose...接下来,就是引出今天的主角 React Query React Query React Query 通常被描述为 React 缺少的数据获取(data-fetching)库,但是从更广泛的角度来看...,它使 React 程序中的获取,缓存,同步和更新服务器状态变得轻而易举。...ReactQuery 就将我们所有的服务端状态维护全局,并配合它的缓存策略来执行数据的存储和更新。

2.1K30

Hooks + TS 搭建一个任务管理系统(六)-- 看板页面展示

看板和任务数据统一 明确我们这个组件的作用,我们需要用它来渲染每一列的看板 大概是这样一个布局,首先,因为我们需要将任务渲染到对应的看板列表下,因此首先我们需要解决数据的问题 我们 KanbanColumn...中获取数据,在这里我们需要十分明确,这个我们的这个组件它只是渲染一列,我们通过遍历实现多列,这个很关键 我们 column 中获取所有的 task 数据,通过 filter 方法,将它筛选出来,这样...其实在我们遍历添加 kanbanColumns 组件,只会发起一个请求,即使,我们给每一个 column 都绑定了 useTask 这是因为,我们采用的 react-query 的功劳,我们采用...Antd 组件库 2. useTaskTypes 处理不同类型任务的 icon 我们的任务中又分为 bug 和 task,我们都会有相应的图标展示 在这里我们 utils 下封装一个 useTaskTypes...了解了 react-query 能够优化请求次数

70240

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

Counter组件内部,我们使用useState钩子定义了一个名为count的状态变量,并将其初始化为0。由useState提供的setCount函数允许我们更新count的值并触发组件重新渲染。...通过这个例子,我们可以轻松地Counter组件内管理和更新count变量的状态。每当状态发生变化时,React都会处理组件重新渲染并相应地更新显示的计数。...我们定义了一个postData函数,用于向服务器保存新数据的POST请求。DataComponent中,我们使用useQuery钩子使用fetchData函数获取数据。...handleSubmit函数内部,我们调用mutation.mutateAsync以向服务器发送新数据对象。我们呈现数据和一个提交按钮。加载,我们显示加载消息;如果有错误,我们显示错误消息。...通过这个设置,React Query处理了服务器状态、缓存和数据获取的管理,使得更容易React组件中跟踪、更新和显示服务器数据

32230

第一个可以条件语句中使用的原生hook诞生了

举个例子,下述例子中,当fetchNote执行异步请求,会由包裹Note的Suspense组件渲染「加载中状态」。 当请求成功,会重新渲染,此时note数据会正常返回。...当请求失败,会由包裹Note的ErrorBoundary组件处理失败逻辑。...但是当isSelected prop变化后,Todo组件也会重新render,fetchTodo执行后会返回一个新的promise。...服务端组件与客户端组件都是React组件,但前者服务端渲染(SSR),后者客户端渲染(CSR),如果都用async await,不太容易从代码层面区分两者。...总结 use是一个「读取异步数据的原语」,他的出现是为了规范React客户端处理异步数据的方式。 既然是原语,那么他的功能就很底层,比如不包括请求的缓存功能(由cache处理)。

70830

React Native组件(一)组件的生命周期

开发者可以在这个方法中获取其中的元素或者子组件,需要注意的是,子组件的componentDidMount方法会在父组件的componentDidMount方法之前调用。...如果需要从网络加载数据显示到界面上,在这里进行网络请求是一个不错的选择。componentDidMount方法中设置state将会被重新渲染。...3.更新 改变props或者state可以导致更新,当一个组件重新渲染,会调用如下方法。...挂载的过程中,初始的props并不会触发调用componentWillReceiveProps方法,这个方法只会在组件中的props更新被调用,另外,调用this.setState()也不会触发调用...shouldComponentUpdate方法默认返回true,用来保证数据变化时,组件能够重新渲染。你也可以重载这个方法,通过检查变化前后props和state,来决定组件是否需要重新渲染。

1.6K50
领券