不仅如此,React-Query还为我们做了如下工作: 多个组件请求同一个query时只发出一个请求 缓存数据失效/更新策略(判断缓存合适失效,失效后自动请求数据) 对失效数据垃圾清理 数据的CRUD由...2个hook处理: useQuery处理数据的查 useMutation处理数据的增/删/改 在下面的例子中,点击「创建用户」按钮会发起创建用户的post请求: import { useQuery,...所以我们需要告诉React-Query,userData query对应的缓存已经失效,需要更新: import { useQuery, queryCache } from 'react-query';...当请求成功后,会触发onSuccess回调,回调中调用queryCache.invalidateQueries,将userData对应的query缓存置为invalidate。...这样,React-Query就会重新请求userData对应query的数据。 总结 通过使用React-Query(或SWR)这样的数据请求库,可以将服务端状态从全局状态中解放出来。
,其他地方使用时只需要直接传入请求参数 useQuery useQuery是React-Query提供的用于请求接口并管理请求状态等信息的Hook。...key值,也可以在数组中,写入多项如:['repoData', '1'],这样React-Query在使用的时候会自动把它拼接为/repoData/1,这个在缓存用户访问过的页面时,非常有用。...然后useQuery会返回一个对象,里面包含着请求相关的所有信息,这些信息会随着请求的进度而改变,就无须我们再使用一组state变量来进行管理了,常用的包括: isLoading:请求是否正在进行 error...那我们可以使用queryClient的prefetchQuery方法,提前拉取到用户可能会访问的数据,并加入到缓存中,由于不需要监听服务端状态等,所以这个方法会比useQuery高效许多。...笔者之后也会继续更新React-Query的其他使用场景,如果可以的话,不妨点个赞再走呢,这对我很重要。
react-query是一位数据获取专家,能够智能管理请求的一切内容,包括数据、状态、缓存,更新等,基于Hooks。...为了进一步增强应用和体验,比如网络错误自动重试,为了防止用户看到的是旧的数据,你需要增加窗口焦点时重新自动获取数据等,可以看出如此发展下去,组件需要管理的状态越来越多,你也会越来越力不从心,状态的增多,...}颗星 ); } 复制代码 在这里使用useQuery,此刻这个请求拥有了自动获取数据,管理请求状态,错误重试,窗口焦点自动获取数据,缓存等,它的第1个参数是一个唯一的key,名字有意义就好...react-query 三大核心概念 Queries useQuery :发起单个请求 useQueries:发起多个请求 useInfiniteQuery:用于无限加载的列表,非常强大,让构建无限加载组件变得简单...,{ enabled, //默认为true,表示自动请求,false的话则需要你手动 retry, //请求失败后,请求的重试次数,也可以为boolean,true为无数次重试,false
也会将数据从应用程序提交到服务器以接收某种响应。有几种方法可以将此数据发送/获取到 API 或服务器,可以使用内置的 API 或外部 npm 包来实现。...GraphQL 提供了 API 中数据的完整且易于理解的描述,使客户端能够精确地请求所需的数据,避免了不必要的数据传输,使得 API 能够随着时间的推移更容易地发展,并提供了强大的开发者工具。...向您的 API 发送 GraphQL 查询,只获取您所需的数据,没有多余的内容。...从 API 缓存的数据可以存储在我们的状态管理中,然后在我们的应用程序中全局使用。尽管数据被缓存,但在刷新页面时,它将丢失数据,需要重新获取。...它提供了许多有用的功能,如数据缓存、自动重试、请求取消和突变。 React Query 的目标是提供一个简单的 API,让数据获取和管理变得更加容易,并且可以与现有的代码库集成。
它是一个针对 React 应用的状态管理器,可以简化许多任务,例如处理 HTTP 请求状态、在客户端保存数据以防止多次请求、使用 hooks 共享数据等等。...请注意数据也可能为 undefined;这是因为在第一次调用时,当请求处于等待状态时,data 尚未呈现。 isLoading:这个标志表示 React Query 正在加载数据。...好的,你现在对 useQuery 的工作方式及其潜力有了一个概念,但是如果你更有兴趣,可以观看我的视频了解更多信息。 好的,就这些!我很快会回到你呈现 React Query 的另一个功能。...你可以检查状态中保存的数据,不同的查询有多少应用程序部分使用等等。你也可以重置状态或删除部分状态以重新获取数据。...现在您已具备使用 React Query 构建身份验证流程的所有知识!
React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...检查响应是否通过返回 200 response.ok 如果响应正常,将响应转换为 json 并返回 promise 如果响应不正确,抛出错误 在 finally 中隐藏加载状态,以确保 Loading 即使发生错误也被隐藏...service 是最流行的术语,我在下面也讨论了很多好的替代名称,如 client 或 api。 要点是,所有的 HTTP 调用都是通过纯 JavaScript 函数处理的,存储在一个文件夹中。...但是还有很多我们没有考虑到的点:缓存?、如果客户端的连接不可靠,如何重新获取?你想在用户重新调整标签时重新获取新数据吗?如何消除重复查询? 你可以不断完善这个自定义Hook来完成所有这些操作。...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。
util 文件夹内,这个文件夹中的 hook 都是一些复用性高的,和页面关系不大的 hook 1. useKanbans 这里获取数据的方法和前面获取项目数据的方法一样,我们采用 useQuery 来进行缓存看板数据...,当 param 变化时,重新发送请求,写入缓存 return useQuery(['kanbans', param], () => client('kanbans', {...其实在我们在遍历添加 kanbanColumns 组件时,只会发起一个请求,即使,我们给每一个 column 都绑定了 useTask 这是因为,我们采用的 react-query 的功劳,在我们采用...useQuery 时,如果在 2s 之内有相同的 queryKey 发出请求的话,就会合并这些请求,只会发出一个 现在我们已经有了每个看板下的 Task 数据了,我们只需要遍历渲染即可,这里我们采用的还是...的用法 对 modal 组件有了更多的了解 了解了 react-query 能够优化请求次数
解决了什么问题 服务端状态有以下特点: 存储在远端,本地无法直接控制 需要异步 API 来查询和更新 可能在不知情的情况下,被另一个请求方更改了数据,导致数据不同步 现有的状态管理库(如 Mobx、Redux...而 React Query 就是为了解决服务端状态带来的上述问题而出现的,除此之外它还带来了以下特性: 更方便地控制缓存 把对于相同数据的多个请求简化成一个 在后台更新过期数据 知道数据什么时候会「过期...」 对于数据的变化尽可能快得做出响应 分页查询和懒加载等请求性能优化 管理服务器状态的内存和垃圾回收 通过结构共享(structural sharing)来缓存查询结果 请求中间态处理 function...query会自动把这些isLoading,isError请求中间态处理好,我们不必写重复逻辑,另外配合Suspense提对一点对于loading场景的处理,Suspense也支持的不错,特别是局部Loading...官网对于React Query的简述,注意global state,你会不解,为什么React Query明明是一个请求库,跟数据状态管理又有什么关系,甚至可以处做全局状态管理 那是因为ReactQuery
我们将学习如何在客户端和服务器上获取数据,对于 HTTP 客户端,我们将使用 Axios,并使用 React Query 库来处理获取到的数据,它允许我们在 React 应用程序中处理 API 请求和响应...Query React Query 是一个很好的处理异步数据的库,可以将数据在 React 组件中使用。...React Query 的另一个好处是它的缓存机制。对于每个查询,我们需要提供相应的查询键,用于将数据存储在缓存中。 这也有助于请求的去重。...# 配置 React Query 我们将使用 React Query 的默认配置,但是我们需要在应用程序中提供一个 QueryClient 实例,它将用于管理缓存和请求。...对于每个 API 请求,我们都将有一个文件,其中包含并导出 API 请求定义函数和用于在 React 中使用请求的 hook。
虽然像Redux这样的库是管理应用程序状态的流行选择,但你应该明白何时使用它们,何时不使用它们,而且在满足需求时考虑像Context API这样的简单替代方案也很重要。...利用React Query进行服务器状态管理对于涉及服务器端状态管理(如数据获取和缓存)的情景,我们引入React Query。...我们定义了一个postData函数,用于向服务器保存新数据的POST请求。在DataComponent中,我们使用useQuery钩子使用fetchData函数获取数据。...在handleSubmit函数内部,我们调用mutation.mutateAsync以向服务器发送新数据对象。我们呈现数据和一个提交按钮。在加载时,我们显示加载消息;如果有错误,我们显示错误消息。...通过这个设置,React Query处理了服务器状态、缓存和数据获取的管理,使得更容易在React组件中跟踪、更新和显示服务器数据。
# 身份验证系统 # 流程梳理 大致流程如下: 用户通过提交登录表单并携带登录凭证向 /auth/login 发起请求 如果用户存在且凭证有效,则返回包含用户数据的响应。...除了响应数据之外,还将附加一个 httpOnly cookie,从此时起用于身份验证请求 每当用户进行身份验证时,我们将从响应中的用户对象存储在 react-query 缓存中,并使其对应用程序可用 由于身份验证是基于...cookie 的,带有 httpOnly cookie,因此我们不需要在前端处理身份验证令牌,任何后续请求都将自动包括令牌 调用 /auth/me 接口将处理页面刷新后的用户数据持久化,该接口将获取用户数据并将其存储在相同的...react-query 缓存中 为了实现此系统,我们需要以下内容: 认证功能(登录、注销和访问已认证用户) 保护需要用户进行身份验证的资源 # 功能实现 # 登录 // src/features/auth...// src/features/auth/api/get-auth-user.ts import { useQuery } from "@tanstack/react-query"; import
在 React.js 项目中集成 GraphQLGraphQL 由于其灵活性和高效性,已经成为构建 API 的热门选择。...它允许您仅请求所需的数据,从而使 API 调用更加高效。与传统的 REST API 不同,传统的 REST API 由服务器确定响应结构,而 GraphQL 则使客户端能够定义其所需数据的形状和结构。...GraphQL 请求。...组件中使用 GraphQL 获取数据现在,让我们使用 GraphQL 在 React 组件中获取数据。...创建一个新组件,例如 PostList.js:// src/components/PostList.jsimport React from 'react';import { useQuery, gql
编写前端组件现在,我们在React组件中使用Apollo Client执行查询和变更:// App.jsimport React from 'react';import { gql, useQuery,...层次结构允许一次请求获取多个级别的数据。...组件中,我们使用useQuery从GraphQL服务器获取数据,并渲染用户和他们的帖子信息。...更好的API设计:强类型系统确保了数据的一致性和正确性,使得API更加易于理解和维护。客户端控制:客户端可以决定获取多少数据,何时获取,提高了用户体验。...缓存优化:客户端可以根据返回的数据结构更容易地进行缓存策略的实施。减少后端复杂性:后端不再需要为了适应不同客户端的需求而创建多个API端点。
官方的功能介绍如下: ⚡️ 自动缓存:智能的客户端缓存,支持请求去重 ️ 异步状态管理:轻松处理任何异步状态 插件系统:强大的插件系统 ✨ 乐观更新:轻松实现乐观更新 合理的默认配置:提供合理的默认值...❝和 vue-use等库提供的useAxios类库不同,pinia-colada是借助 pinia 缓存请求,自带缓存。...用于管理异步数据获取,支持缓存、加载状态和错误处理。...refetch, // 重新获取数据(忽略缓存) // 便捷别名 error, // 错误信息 data, // 请求成功后的数据...当 todoId 变化时,useQuery 会自动重新获取数据 todoId.value = 2; ❝动态 key 的作用: 当 key 变化时,useQuery 会自动重新执行查询函数。
当进行网络请求和 API 调用时,你是否知道本次请求的参数类型以及返回的响应数据类型?...文档: useQuery() | tRPC 不妨此时打开控制台面板,看看请求 不难看出,调用 greeting 函数本质是向 /api/trpc/greeting 发送了 http 请求,并且携带参数...这是 tRPC 的一个特性:请求批处理,将同时发出的请求(调用)可以自动组合成一个请求。...此时请求变为 post 请求,并且携带的参数也以 body 形式传递。 通过 useQuery 和 useMutation 就能够用 tRPC 实现最基本的 CRUD。...tRPC 针对 react 项目的查询主要依赖于 @tanstack/react-query,你也可以到 tRPC React Query documentation 查看相关 hook。
当进行网络请求和 API 调用时,你是否知道本次请求的参数类型以及返回的响应数据类型?...文档: useQuery() | tRPC不妨此时打开控制台面板,看看请求图片图片不难看出,调用 greeting 函数本质是向 /api/trpc/greeting 发送了 http 请求,并且携带参数...图片这是 tRPC 的一个特性:请求批处理,将同时发出的请求(调用)可以自动组合成一个请求。...:::此时请求变为 post 请求,并且携带的参数也以 body 形式传递。图片图片通过 useQuery 和 useMutation 就能够用 tRPC 实现最基本的 CRUD。...tRPC 针对 react 项目的查询主要依赖于 @tanstack/react-query,你也可以到 tRPC React Query documentation 查看相关 hook。
文章系翻译,原文见阅读原文 你肯定看过(或写过)这样的渲染模式: 通过AJAX请求数据时渲染一个loading占位图标 当数据返回后重新渲染组件 让我们一个使用Fetch API的简单例子: import...为了减少重复请求,我决定使用LocalStorage缓存服务端数据。 这是否意味着同样的渲染逻辑要重复写n次呢?...解耦数据请求 怎么可能,让我们将数据请求部分抽离为一个自定义hook——useSomeData。...定制数据请求 我们的应用越来越复杂,我决定上Redux。...(FETCH_SOME_DATA); return { someData: data, loading, error }; }; 每当我自愿(或被迫)修改数据请求/状态管理部分时,只需要修改对应的
当我们开始在前端重新创建数据库时,后端和前端之间的职责界限很快就变得模糊不清。作为前端开发人员,我们不需要完全了解表及其关系即可创建简单的 UI。我们也不必知道如何高水平地标准化我们的数据。...如果我们不再在前端代码中管理后端状态,而只是将其视为需要定期更新的缓存会怎么样呢?将前端视为从缓存读取内容的简单显示层后,我们的代码就会变得更加易用,并且更适合纯前端开发人员阅读。...React Query 我已经在自己的多数个人和工作项目中使用 React Query 几个月了。这个库有一个非常简单的 API 和几个 hooks,用于管理查询(获取数据)和突变(更改数据)。...https://react-query.tanstack.com/docs/overview 现在,无论需要什么数据,你都可以将 useQuery hook 与你设置的唯一键(在本例中为“todos”)...React Query 和 SWR 大约是在同一时间开始开发的,并且以积极的方式相互影响。在 react-query 文档中也对这两个库进行了彻底的比较。
取消请求 React 中当前正在发出请求的组件从页面上卸载了,理想情况下这个请求也应该取消掉,那么如何把请求的取消和页面的卸载关联在一起呢?...abortController.abort() }, []) return { result, loading } } 复制代码 那么比如在路由发生切换,Tab 发生切换等场景下,被卸载掉的组件发出的请求也会被中断...是不是也可以,尝试配合react-router封装一下。...(); // 接口请求依赖 page 和 size useEffect(() => { api.getUsers(); }, [query.page, query, size]); // 分页改变...在之后的工作中,对于学到的知识点我也会进行进一步的总结,发一些有价值的文章,感兴趣的话欢迎关注~