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

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

你将在本系列中发现更多关于它的内容,学习如何使用它,并欣赏其在 React 应用程序中的简洁性。 useQuery 第一个核心概念是 useQuery。...为了这样做,你必须使用 useQueryClient 钩子来检索 queryClient,并使用 invalidateQueries 方法,你可以使 React Query 缓存无效,同时使指定的查询或多个查询失效...onSuccess: () => { client.invalidateQueries([QUERY_KEY.todos]); }, }); ... }; 好的,我想你已经对如何使用...如果需要,你可以自定义该组件或强制在生产模式下渲染它。要了解更多相关主题,请查阅文档。 在你的应用程序中使用该组件的好处在于,它允许在运行时查看 ReactQuery 中发生的情况。...可以使用一个名为 useSignOut 的自定义 hook 来构建它;它的实现很简单,如下所示: import { useQueryClient } from '@tanstack/react-query

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

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

    内联写法 集中管理 自定义 Hook react-query/swr 注意:在本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类的替代方法。...fetch(`${process.env.REACT_APP_API_BASE_URL}users`).then(response => response.json() ); } 下面是对...方式3:自定义Hook 借助 React Hooks 的魔力,我们终于可以集中处理重复的逻辑。那么如何创建一个自定义 useFetch 钩子来简化我们的 HTTP 调用呢?...你可以不断完善这个自定义Hook来完成所有这些操作。但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。.../services/userService"; import { useQuery } from "react-query"; export default function ReactQueryDemo

    4.5K10

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

    内联写法 集中管理 自定义 Hook react-query/swr 注意:在本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类的替代方法。...fetch(`${process.env.REACT_APP_API_BASE_URL}users`).then(response => response.json() ); } 下面是对...方式3:自定义Hook 借助 React Hooks 的魔力,我们终于可以集中处理重复的逻辑。那么如何创建一个自定义 useFetch 钩子来简化我们的 HTTP 调用呢?...你可以不断完善这个自定义Hook来完成所有这些操作。但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。.../services/userService"; import { useQuery } from "react-query"; export default function ReactQueryDemo

    2.7K30

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

    链接地址:github.com/TanStack/qu… 简单使用 QueryClientProvider 首先,需要在组件外层定义一个queryClient作为组件操作和使用数据的一个共同容器,通过...”不会触发,需要使用其返回的“refetch”来触发操作 queryFn:全局定义请求方法,其他地方使用时只需要直接传入请求参数 useQuery useQuery是React-Query提供的用于请求接口并管理请求状态等信息的...除了这两项基本的参数,useQuery还可以传入上面defaultOptions的所有参数,来表示对这个请求单独的配置。...最后 感谢你能看到这里,本文简单介绍了React-Query对服务端数据进行增删改查的功能实现,以及React-Query的一些其他能力,希望对你有用,React-Query的使用场景没有其他状态管理库那么广泛...,但还是能解决很多服务器拉取数据的痛点。

    1.9K30

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

    这将使它们在将来需要的任何地方都可以使用,无论是用于 Service Worker、缓存 API 还是其他处理或修改请求和响应的类似功能,或者任何可能需要您编写程序来生成响应的地方。...简单来说,Memoization 是指将结果存储在内存中。Memoization 函数通常更快,因为如果使用相同的参数再次调用函数,则不会重新执行函数,而是从缓存中获取结果。...在 React 中,我们可以通过以下两种方式实现 Memoization: useMemo React 提供了一个内置的钩子函数 useMemo 允许您对耗费性能的函数进行记忆化,以避免在每次重新渲染时调用它们...# 安装 npm install react-query # 使用 import React from "react"; import { useQuery, QueryClient, QueryClientProvider..., error, data } = useQuery("repoData", () => fetch("https://api.github.com/repos/tannerlinsley/react-query

    2.1K20

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

    这里,推荐使用React-Query管理服务端状态。 ? 另一个可选方案是SWR[1]。...你可以从这里[2]看到他们的区别 初识React-Query React-Query是一个基于hooks的数据请求库。...我们可以将刚才的例子用React-Query改写: import { useQuery } from 'react-query' function App() { const {data,...不仅如此,React-Query还为我们做了如下工作: 多个组件请求同一个query时只发出一个请求 缓存数据失效/更新策略(判断缓存合适失效,失效后自动请求数据) 对失效数据垃圾清理 数据的CRUD由...这样,React-Query就会重新请求userData对应query的数据。 总结 通过使用React-Query(或SWR)这样的数据请求库,可以将服务端状态从全局状态中解放出来。

    3.1K10

    react-query从拒绝到拥抱

    其次他并不限定你使用发起请求的库,所以你可以使用任何你想使用的请求方式,再次强调,他是一个管理高手,他把数据获取从混乱变成秩序,从复杂变成简单,从讨厌变成喜欢。...当我第一次开始使用的时候,就对他有了偏见,难学!上手并不是很友好,不符合我过去获取数据的直觉和经验,但奇怪的是却极受开发者欢迎。由于过去的经验和靠表面的直觉差点就让我错过了如此棒的库。...下面来看看react-query是如何把这件事变成乐趣的。...}颗星 ); } 复制代码 在这里使用useQuery,此刻这个请求拥有了自动获取数据,管理请求状态,错误重试,窗口焦点自动获取数据,缓存等,它的第1个参数是一个唯一的key,名字有意义就好...复制代码 Mutation(突变) 用来创建/更新/删除数据时使用,最典型的例子就是一个todoList,对todo进行增删改相关的请求。使用useMutation hooks。

    3.2K31

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

    除了响应数据之外,还将附加一个 httpOnly cookie,从此时起用于身份验证请求 每当用户进行身份验证时,我们将从响应中的用户对象存储在 react-query 缓存中,并使其对应用程序可用 由于身份验证是基于...return apiClient.get("/auth/me"); }; export const useUser = () => { const { data, isLoading } = useQuery...useNotifications 钩子来显示通知: // src/pages/dashboard/jobs/create.tsx import { useNotifications } from "...-- ... --> ); }; export default DashboardCreateJobPage; 提交成功后可以看到通知: 另一个可以利用通知的地方是 API...由于 Axios 支持拦截器,而且我们已经对其进行了配置,因此我们只需要修改响应错误拦截器即可。

    2.2K30

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

    虽然像Redux这样的库是管理应用程序状态的流行选择,但你应该明白何时使用它们,何时不使用它们,而且在满足需求时考虑像Context API这样的简单替代方案也很重要。...在父组件中,我们使用react-redux的Provider组件将Child组件包装起来,并将Redux store作为属性传递。...在Child组件中,我们使用useSelector钩子从Redux store中获取count状态。我们还使用useDispatch钩子获取对dispatch函数的引用。...import React from 'react';import { useQuery, useMutation, QueryClient, QueryClientProvider } from 'react-query...在DataComponent中,我们使用useQuery钩子使用fetchData函数获取数据。它返回一个包含数据、isLoading和isError等属性的对象,用于处理加载和错误状态。

    2.8K31

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

    After: TanStack Query的声明式写法 import { useQuery } from'@tanstack/react-query'; asyncfunction fetchProductsByCategory...直接使用缓存,不会闪加载中 ✅ 智能刷新:5分钟内数据被认为是新鲜的,不会重新请求;超过5分钟后会后台刷新 ✅ Tab激活刷新:用户从其他Tab回来时会自动检查数据是否需要更新 ✅ 没有竞态条件:内部自动处理了请求的顺序问题...import { useMutation, useQuery, useQueryClient } from'@tanstack/react-query'; function useTodos() {...我见过开发者用一整个周末都没搞对。...这不是你的错,是工具选择的错。 TanStack Query不是一个额外的依赖,而是一笔划算的投资。

    23210

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

    前言 在项目中,通常都需要跟服务端进行异步的数据交互,基本都是用到axios这个库来做请求,嗯,毕竟拥有80k star,明星项目 接下来,我们来回顾下axios在项目中的使用 以查询用户信息为例,我们会这样封装...另外,现在的前端项目特别是单页面应用,会使用Flux、Redux、Mobox等状态管理库,会把组件间共享的数据都存放在状态管理库中,这些可以分为两类,一类是用户交互的中间状态,比如isLoading,isClose...li> ))} ) } React query会自动把这些isLoading,isError请求中间态处理好,我们不必写重复逻辑,另外配合Suspense提对一点对于...举个例子: import React from "react"; import { useQuery, queryCache } from "react-query"; import "....Things That Might Surprise You》 不过令人费解的是官方强调ReactQuery 的状态管理,但是在官网例子并没有给出类似的例子,上述例子还是在官方的github仓库翻到

    3.1K30

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

    接下来我们将来处理看板部分的展示 知识点抢先看 封装 KanbanColumn 来布局页面 编写大量的 custom hook 来处理看板数据 对 useQuery 有进一步的了解 利用 filter...[1] return Number(id) } 3. useProjectInUrl 有了我们的 projectId ,我们就可以使用通过它来获取我们的项目数据,这样我们就能获取到我们的项目的名称...,显示到页面上 // 通过 id 获取项目信息 export const useProjectInUrl = () => useProject(useProjectIdInUrl()) 使用 const...useQuery 时,如果在 2s 之内有相同的 queryKey 发出请求的话,就会合并这些请求,只会发出一个 现在我们已经有了每个看板下的 Task 数据了,我们只需要遍历渲染即可,这里我们采用的还是...的用法 对 modal 组件有了更多的了解 了解了 react-query 能够优化请求次数

    93940

    React 查询:无限滚动

    在这些平台上,我们不再使用传统的分页,而是通过无限滚动来加载数据。没有上一页或下一页的按钮,数据会根据需要自动生成。但在底层,无限滚动仍然是分页的一种形式。下面让我们看看代码吧!...我会将其作为对象接收并使用解构。...使用 useRef 钩子创建一个观察者引用,并将 IntersectionObserver 类型作为泛型传递,如下所示:// src/Todo/index.tsxconst observer = useRef...();观察者是一种设计模式,定义了对象之间的一对多依赖关系,以便当对象更改状态时,所有依赖项都会被通知并自动更新。...正如我之前所说,无限滚动是一种不同类型的分页 让我们使用 React Query 的 useInfiniteQuery 钩子。

    88000

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

    文档: useQuery() | tRPC 不妨此时打开控制台面板,看看请求 不难看出,调用 greeting 函数本质是向 /api/trpc/greeting 发送了 http 请求,并且携带参数...数据生成​ 你可以编写一个 seed 脚本,用于插种(生成)自定义数据。...---- prisma 不是本文重点,篇幅略少,但是作为 Typeorm 的长期使用者而言,我认为 prisma 会比 typeorm 友善一些,至少从文档上来说 prisma 大胜一筹,而且很多 node...下面是一些代码演示 由于 create-t3-app 默认是 Discord OAuth,因此我这边替换成使用者更多的 Github。...如果你想自定义修改登录页面,可以参考该视频Create your own next-auth Login Pages - YouTube 部署 tRPC​ 通常来说 tRPC 会配合全栈框架使用,因此可以非常轻松的部署在

    4.2K51

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

    文档: useQuery() | tRPC不妨此时打开控制台面板,看看请求图片图片不难看出,调用 greeting 函数本质是向 /api/trpc/greeting 发送了 http 请求,并且携带参数...数据生成你可以编写一个 seed 脚本,用于插种(生成)自定义数据。...------prisma 不是本文重点,篇幅略少,但是作为 Typeorm 的长期使用者而言,我认为 prisma 会比 typeorm 友善一些,至少从文档上来说 prisma 大胜一筹,而且很多 node...下面是一些代码演示由于 create-t3-app 默认是 Discord OAuth,因此我这边替换成使用者更多的 Github。...图片如果你想自定义修改登录页面,可以参考该视频Create your own next-auth Login Pages - YouTube部署 tRPC通常来说 tRPC 会配合全栈框架使用,因此可以非常轻松的部署在

    2.7K20

    Redux真的该换了吗?2025年React状态管理的残酷真相

    你需要写中间件、自定义逻辑、手写缓存层……而现在,有更好的方案。...你还是要理解slices、thunks这些概念。 Zustand - 赢家。...评测维度2:性能(避免不必要的重渲染) 共享状态库最常见的问题是:修改了一个小状态,结果所有使用该store的组件都重新渲染。...但Zustand是"随意型"的,这对小团队很好,对大团队可能造成代码风格混乱。所以选择时要考虑团队规模。 Q: 那我现在项目的Redux代码怎么办?...最后的话 如果你还在新项目中选择Redux,请问自己一个诚实的问题:是因为技术决定,还是因为"之前一直都这么用"?如果是后者,也许是时候尝试一下新的思路了。

    30110

    使用react的7个避坑案例

    /hooks/useTodoList'; import { useQuery } from '../hooks/useQuery'; import TodoItem from '....但是你遇到一个问题:因为使用相同的引用更改了对象,React无法观察并触发重新渲染。 解决这个问题,我们应该使用setState()方法或者useState()钩子。... ); } } 这里===对字符串'1'是无效的。而解决这个问题,需要我们在传递props值的时候用{}包裹。...频繁使用Redux 在大型的React app中,很多开发者使用Redux来管理全局状态。 虽然Redux很有用,但是没必要使用它来管理每个状态。...比如我们想更改组件中的表单按钮状态的时候,我们更多的是优先考虑state方法或者useState钩子。 7. 组件没以大写字母开头命名 在JSX中,以小写开头的组件会向下编译为HTML元素。

    83920
    领券