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

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

你将在本系列中发现更多关于它的内容,学习如何使用它,并欣赏其在 React 应用程序中的简洁性。 useQuery 第一个核心概念是 useQuery。...UseQuery 是一个 React hook,它需要三个参数: 1.查询关键字 2.查询函数 3.配置项 让我们从第一个参数开始。查询关键字是 React Query 用于识别你的查询的关键字。...这个 hook 的结果有三个重要的属性: data:此属性包含查询函数的结果。请注意数据也可能为 undefined;这是因为在第一次调用时,当请求处于等待状态时,data 尚未呈现。...突变是一个简单的 hook,有两个参数: 用于处理请求的函数 用于处理成功和错误 hooks 的选项,但也用于配置突变(重试、重试延迟等)。...当你处理突变时,另一个重要的概念是 QueryClient。

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

    urql实现GraphQL的react客户端

    urql简介 urql是一个快速,轻巧且可自定义的GraphQL客户端。是一个js的库。...client}> ); 通过createClient创建一个客户端,url指定服务端地址,fetchOptions提供一个函数,返回要添加到请求中的参数信息...,比如token 利用react的上下文来传递客户端给子组件,则接下来在Todos组件中可以直接使用query而不需要再次创建客户端 执行查询 import { useQuery } from 'urql...这个Hook函数,即刻进行查询返回结果,其中query参数代表请求的GraphQL语句,variables参数代表传递的变量数据。...执行变更 与查询不一样的是,变更语句不会在调用useMutation这个Hook函数时立即执行,而是需要通过函数返回值的第二个元素(其是一个函数),传入数据调用以后才会请求执行。

    1.9K20

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

    ,我们可以传入一些参数,用于管理项目中的请求、缓存、日志的相关配置,这些配置会对整个项目生效,其中包含了四个模块的配置参数。...”,“useQuery”不会触发,需要使用其返回的“refetch”来触发操作 queryFn:全局定义请求方法,其他地方使用时只需要直接传入请求参数 useQuery useQuery是React-Query...除了这两项基本的参数,useQuery还可以传入上面defaultOptions的所有参数,来表示对这个请求单独的配置。...onSuccess:接口调用成功后的回调 onError: 失败的回调 返回的数据和useQuery基本是相同的,这里的mutate则是触发更改的方法,如果我们想执行useMutation中传入的方法...,我们只需要调用mutate即可,传给mutate的参数都会被带到useMutation的构造方法中。

    1.8K30

    react-query从拒绝到拥抱

    ,此刻这个请求拥有了自动获取数据,管理请求状态,错误重试,窗口焦点自动获取数据,缓存等,它的第1个参数是一个唯一的key,名字有意义就好,第2个参数是请求数据的方法,返回Promise,它还有第3个参数是个配置选项的对象...Mutations useMutation:用来创建、更新、删除数据,当你的接口涉及这些逻辑时你可以使用它。...下面来看下Queries的配置对象 Queries options 配置对象就是第3个参数,它是一个对象,这个配置对象在useQueries,useInfiniteQuery中也相同,这个对象有数十个参数可供配置...enabled=false时 ... } = useQuery(queryKey, queryFn?...复制代码 Mutation(突变) 用来创建/更新/删除数据时使用,最典型的例子就是一个todoList,对todo进行增删改相关的请求。使用useMutation hooks。

    3.2K31

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

    我们可以将刚才的例子用React-Query改写: import { useQuery } from 'react-query' function App() { const {data,...不仅如此,React-Query还为我们做了如下工作: 多个组件请求同一个query时只发出一个请求 缓存数据失效/更新策略(判断缓存合适失效,失效后自动请求数据) 对失效数据垃圾清理 数据的CRUD由...2个hook处理: useQuery处理数据的查 useMutation处理数据的增/删/改 在下面的例子中,点击「创建用户」按钮会发起创建用户的post请求: import { useQuery,...所以我们需要告诉React-Query,userData query对应的缓存已经失效,需要更新: import { useQuery, queryCache } from 'react-query';...const {mutate} = useMutation(userData => axios.post('/api/user', userData), { onSuccess: () => {

    3.1K10

    你的useEffect真的在「同步」吗?为什么React开发者集体掉进了状态管理的陷阱

    你本应该说「这是我们上次询问服务器时得到的版本」,却说成了「这是真实数据」。...这就是配置驱动而非代码驱动的威力。 第四部分:深度特性——变更操作与乐观更新 真正的考验来自于修改数据。这里useMutation展现出了威力。...import { useMutation, useQuery, useQueryClient } from'@tanstack/react-query'; function useTodos() {...第五部分:性能与架构思考 缓存的两个维度 TanStack Query维护的缓存有两个关键参数: { staleTime: 5 * 60 * 1000, // 「新鲜度」:数据5分钟内被认为是新的...,清理缓存 }); 这样的配置意味着: 用户在30分钟内多次打开同一商品,永远是秒加载 但如果他在网络恢复后打开,会在后台自动检查是否有价格/库存更新 1小时没看过的商品就不占用内存了 何时使用废弃查询

    17710

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

    其实在我们在遍历添加 kanbanColumns 组件时,只会发起一个请求,即使,我们给每一个 column 都绑定了 useTask 这是因为,我们采用的 react-query 的功劳,在我们采用...useQuery 时,如果在 2s 之内有相同的 queryKey 发出请求的话,就会合并这些请求,只会发出一个 现在我们已经有了每个看板下的 Task 数据了,我们只需要遍历渲染即可,这里我们采用的还是...,不然在服务器请求慢时,造成页面假死过长 和前面一样,我们采用 useMutation 来封装 http 请求,返回一个被处理过的 mutate 请求方式或者 mutateAsync 异步请求方式 在这里我们接收了一个...id ,删除看板的 id 五、任务的增删改查功能 增删改查的功能都差不多,只是传递的参数不一样罢了,在这里,我们就拿一个编辑功能来讲 我们首先封装了一个控制 modal 开关的 hook useTasksModel...了解了 useQuery 的用法 对 modal 组件有了更多的了解 了解了 react-query 能够优化请求次数

    91540

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

    虽然像Redux这样的库是管理应用程序状态的流行选择,但你应该明白何时使用它们,何时不使用它们,而且在满足需求时考虑像Context API这样的简单替代方案也很重要。...它将新值作为参数。然后,我们定义了两个函数increment和decrement,它们分别使用setCount函数增加和减少count的值。这些函数在对应的按钮被点击时调用。...Redux用于集中式状态管理在进入更复杂的场景时,我们引入了Redux,这是一个广泛采用的用于管理应用程序状态的库。...import React from 'react';import { useQuery, useMutation, QueryClient, QueryClientProvider } from 'react-query...useMutation返回的mutation对象包括一个mutateAsync方法,可用于触发变异。

    2.1K31

    Typescript 全栈最值得学习的技术栈 TRPC

    时,将会提示出服务端定义好的 greeting 函数,如下图所示。...要支持传递参数,首先需要在服务端定义传递参数的类型(会有 Zod 对参数效验),这样客户端才有对应的类型提示。然后调用 greeting 函数时,通过通过函数参数的形式来传递请求参数。...举例说明,比如说我们将 appRouter 改写成这样,通过 input 参数指定了 useQuery 需要传递一个 name 为字符串且不为空的对象。...'world'}`, } }), }) 调用 trpc.greeting.useQuery({ name: 'kuizuo' }) 发送的请求的 query 参数则变为 不仅于此,...此时请求变为 post 请求,并且携带的参数也以 body 形式传递。 通过 useQuery 和 useMutation 就能够用 tRPC 实现最基本的 CRUD。

    4.1K51

    Typescript 全栈最值得学习的技术栈 TRPC

    时,将会提示出服务端定义好的 greeting 函数,如下图所示。...要支持传递参数,首先需要在服务端定义传递参数的类型(会有 Zod 对参数效验),这样客户端才有对应的类型提示。然后调用 greeting 函数时,通过通过函数参数的形式来传递请求参数。...举例说明,比如说我们将 appRouter 改写成这样,通过 input 参数指定了 useQuery 需要传递一个 name 为字符串且不为空的对象。...'world'}`, } }),})调用 trpc.greeting.useQuery({ name: 'kuizuo' }) 发送的请求的 query 参数则变为图片不仅于此,你如果同时调用了多次...:::此时请求变为 post 请求,并且携带的参数也以 body 形式传递。图片图片通过 useQuery 和 useMutation 就能够用 tRPC 实现最基本的 CRUD。

    2.6K20

    Hooks + TS 搭建一个任务管理系统(七)-- 任务组页面实现

    useQuery 发送请求 再复习一下,它的第二个参数是一个异步事件,第一个参数是元组,当依赖项 param 发生改变时,会重新发送请求,更新缓存中的 epics 数据内容 export const...: Partial) => { const client = useHttp() return useQuery(['epics', param], () =...,这里采用 useMutation 来处理,传入当前的 id ,配置删除的 config 对象 写到这里自己也对 useMutation 有了进一步的认识,它可以接收两个参数,第一个参数我们传入我们的异步请求...,第二个参数来配置 config 如何处理缓存中的数据 // 删除看板 export const useDeleteEpic = (queryKey: QueryKey) => { const...这里我们采用 filter 来实现,当 task 下的 epicId 和 epic 下的 id 一致时说明是这个任务组下的,我们遍历渲染即可 { tasks?.

    1.1K20

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

    目前,当涉及到管理控制台中的用户身份验证时,应用程序仍然依赖于测试数据。在本节中,我们将构建应用程序的身份验证系统,允许用户认证并访问受保护的资源在管理控制台中。...我们还将创建一个 toast 通知系统,以便在发生我们希望通知用户的操作时向他们提供反馈。...除了响应数据之外,还将附加一个 httpOnly cookie,从此时起用于身份验证请求 每当用户进行身份验证时,我们将从响应中的用户对象存储在 react-query 缓存中,并使其对应用程序可用 由于身份验证是基于...Button> ); }; # 访问已认证用户 // src/features/auth/api/get-auth-user.ts import { useQuery...return apiClient.get("/auth/me"); }; export const useUser = () => { const { data, isLoading } = useQuery

    2.1K30

    为什么我不再用Redux了

    需要在应用程序之间共享不可变数据时,它现在依旧是一种可以方便扩展的优秀工具。 但是,为什么我们非得需要一个全局存储呢?...Redux 不是缓存 使用 Redux 和类似的状态管理库时,大多数人都会遇到的一大问题是,我们会将其视为后端状态的缓存。...React Query 我已经在自己的多数个人和工作项目中使用 React Query 几个月了。这个库有一个非常简单的 API 和几个 hooks,用于管理查询(获取数据)和突变(更改数据)。...只要函数是异步的,实现就无关紧要——你可以轻松地使用 Fetch API 代替 Axios。 要更改后端状态时,React Query 提供了 useMutation hook。...React Query 和 SWR 大约是在同一时间开始开发的,并且以积极的方式相互影响。在 react-query 文档中也对这两个库进行了彻底的比较。

    3.4K20
    领券