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

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

用户交互中间状态 服务端状态 陈年老项目中,通常用Redux、Mobx这样「全局状态管理方案」无差别对待他们。...事实上,他们有很大区别: 用户交互中间状态 比如组件isLoading、isOpen,这类「状态特点是: 以「同步」形式更新 「状态」完全由前端控制 「状态」比较独立(不同组件拥有各自isLoading...「缓存」性质不同于「状态不同于交互中间状态,服务端状态更应被归类为「缓存」,他有如下性质: 通常以「异步」形式请求、更新 「状态」由请求数据源控制,不由前端控制 「状态」可以由不同组件共享...当请求成功,会触发onSuccess回调,回调调用queryCache.invalidateQueries,userData对应query缓存置为invalidate。...这样,React-Query就会重新请求userData对应query数据。 总结 通过使用React-Query(或SWR)这样数据请求库,可以服务端状态从全局状态解放出来。

2.6K10

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

目前,当涉及到管理控制台中用户身份验证时,应用程序仍然依赖于测试数据。本节,我们构建应用程序身份验证系统,允许用户认证并访问受保护资源管理控制台中。...除了响应数据之外,还将附加一个 httpOnly cookie,从此时起用于身份验证请求 每当用户进行身份验证时,我们将从响应用户对象存储 react-query 缓存,并使其对应用程序可用 由于身份验证是基于...cookie ,带有 httpOnly cookie,因此我们不需要在前端处理身份验证令牌,任何后续请求都将自动包括令牌 调用 /auth/me 接口处理页面刷新用户数据持久化,该接口获取用户数据并将其存储相同...react-query 缓存 为了实现此系统,我们需要以下内容: 认证功能(登录、注销和访问已认证用户) 保护需要用户进行身份验证资源 # 功能实现 # 登录 // src/features/auth...我们希望确保任何这样尝试都将重定向用户到登录页面。为此,我们要创建一个组件,它将包装受保护资源,并允许用户查看受保护内容,只有在他们经过身份验证情况下才能访问。

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

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

return } 这是一个组件拉取服务端数据简单例子,组件,我们简单拉取了一个接口数据,并监听接口状态,根据状态来更新不同UI。...key值,也可以在数组,写入多项如:['repoData', '1'],这样React-Query使用时候会自动把它拼接为/repoData/1,这个缓存用户访问过页面时,非常有用。...queryFn:用于请求方法,如果在QueryClient配置了,这里可以不必再写,需要返回请求完成所处理数据。...onSuccess:接口调用成功回调 onError: 失败回调 返回数据和useQuery基本是相同,这里mutate则是触发更改方法,如果我们想执行useMutation传入方法...,并在屏幕一角提供一个切换按钮以显示和隐藏devtools devtools我们可以直观看到已经缓存下来数据和整个项目的配置,以及各个接口状态等。

70830

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

它是一个针对 React 应用状态管理器,可以简化许多任务,例如处理 HTTP 请求状态客户端保存数据以防止多次请求、使用 hooks 共享数据等等。...通过它,你可以以一种非常简单方式从源检索数据并处理此请求所有状态。...突变 伙计们,是时候谈论 React Query 第二个核心概念了,即突变。 这是什么? 突变是用户可以在你应用程序执行操作,你可以突变想象成更改或创建某些东西操作。...在你应用程序中使用该组件好处在于,它允许在运行时查看 ReactQuery 中发生情况。你可以检查状态中保存数据,不同查询有多少应用程序部分使用等等。...,hook 返回一个简单函数,该函数清除用户状态值并导航到登录页面。

3K42

react-query从拒绝到拥抱

react-query是一位数据获取专家,能够智能管理请求一切内容,包括数据、状态、缓存,更新等,基于Hooks。...为了进一步增强应用和体验,比如网络错误自动重试,为了防止用户看到是旧数据,你需要增加窗口焦点时重新自动获取数据等,可以看出如此发展下去,组件需要管理状态越来越多,你也会越来越力不从心,状态增多,...导致你组件更容易出bug,很大可能会造成你忘记去修改或重置它们状态,因为这些状态分布零散,同时这也会造成将来代码是多么难以维护和扩展,这会是一场噩梦。...react-query 三大核心概念 Queries useQuery :发起单个请求 useQueries:发起多个请求 useInfiniteQuery:用于无限加载列表,非常强大,让构建无限加载组件变得简单...下面来看下Queries配置对象 Queries options 配置对象就是第3个参数,它是一个对象,这个配置对象useQueries,useInfiniteQuery也相同,这个对象有数十个参数可供配置

2.6K31

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

之前,了解了如何设置模拟 API,而在本节学习如何通过应用程序消费 API。当我们提到 API 时,指的是 API 后端服务。...我们学习如何在客户端和服务器上获取数据,对于 HTTP 客户端,我们将使用 Axios,并使用 React Query 库来处理获取到数据,它允许我们 React 应用程序处理 API 请求和响应...,可以数据 React 组件中使用。...我们可以看到这里有一定量重复代码: 需要定义相同data、error和 loading 状态 必须相应地更新不同状态 数据我们离开组件时立即被丢弃 如果使用 React Query,我们可以使用...React Query 另一个好处是它缓存机制。对于每个查询,我们需要提供相应查询键,用于数据存储缓存。 这也有助于请求去重。

1.5K20

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

,我们不仅要请求数据,还要处理相应loading,error这些中间态,这类通用中间状态处理逻辑可能在不同组件重复写很多次。...另外,现在前端项目特别是单页面应用,会使用Flux、Redux、Mobox等状态管理库,会把组件间共享数据都存放在状态管理库,这些可以分为两类,一类是用户交互中间状态,比如isLoading,isClose...,我们不仅数据一锅炖放在全局状态管理上,写法上也使得项目越来越臃肿了(以至于出现后面rematch、dva方案进行简化),我们有没有想过,服务端状态就不应该放在全局状态管理上,全局状态管理应该专门处理用户交互中间状态...解决了什么问题 服务端状态有以下特点: 存储远端,本地无法直接控制 需要异步 API 来查询和更新 可能在不知情情况下,被另一个请求方更改了数据,导致数据不同步 现有的状态管理库(如 Mobx、Redux...借助于这样特性,我们就可以所有跟服务端进行交互数据从类似于 Redux 这样状态管理工具剥离,而全部交给 ReactQuery 来管理。

2.1K30

React 请求远程数据四种方法

内联写法 集中管理 自定义 Hook react-query/swr 注意:本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类替代方法。...但是这个示例忽略了加载状态,错误处理,声明和设置相关状态等。现实世界, HTTP 调用看起来更像这样。...看一下我们要解决一些问题: 声明加载状态 声明错误状态 错误打印到控制台 检查响应是否通过返回 200 response.ok 如果响应正常,响应转换为 json 并返回 promise 如果响应不正确...,抛出错误 finally 隐藏加载状态,以确保 Loading 即使发生错误也被隐藏 声明一个空依赖项数组,以便 useEffect 只运行一次 这只是一个简单示例,它忽略了许多其他相关问题...service 是最流行术语,我在下面也讨论了很多好替代名称,如 client 或 api。 要点是,所有的 HTTP 调用都是通过纯 JavaScript 函数处理,存储一个文件夹

2.3K30

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

作为前端缓存库佼佼者,React-Query一直拥有大量受众,官方推出React-Query课程都卖出了8w+份。但就是这样一款能打的产品,居然有被淘汰风险,这究竟是为什么?...类似的,全栈框架Next.js,也推荐CSR(客户端渲染)时使用同团队开发缓存库SWR用于数据同步操作。但是,随着SSR框架开始支持序列化数据,这一切都变了。...序列化数据意义React,对于如下JSX:const name = "卡颂";你好,{name}传统SSR,经由后端处理,传递给前端是如下HTML结构:你好,卡颂</p...React Server Component,同样JSX结构经由后端序列化,传递给前端是Content-Type为text/x-component的如下数据结构:0:["$@1",null]1...比如,如下Next.js代码,AddToCart组件在前端渲染,addItem方法逻辑是操作数据库后端逻辑:import { cookies } from 'next/headers'; export

42230

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

作为前端缓存库佼佼者,React-Query一直拥有大量受众,官方推出React-Query课程都卖出了8w+份。 但就是这样一款能打的产品,居然有被淘汰风险,这究竟是为什么?...类似的,全栈框架Next.js,也推荐CSR(客户端渲染)时使用同团队开发缓存库SWR用于数据同步操作。 但是,随着SSR框架开始支持「序列化数据」,这一切都变了。...序列化数据意义 React,对于如下JSX: const name = "卡颂"; 你好,{name} 传统SSR,经由后端处理,传递给前端是如下HTML结构: 你好...React Server Component,同样JSX结构经由后端序列化,传递给前端是Content-Type为text/x-component的如下数据结构: 0:["$@1",null]...比如,如下Next.js代码,AddToCart组件在前端渲染,addItem方法逻辑是操作数据库后端逻辑: import { cookies } from 'next/headers';

23020

React 请求远程数据四种方法

内联写法 集中管理 自定义 Hook react-query/swr 注意:本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类替代方法。...但是这个示例忽略了加载状态,错误处理,声明和设置相关状态等。现实世界, HTTP 调用看起来更像这样。...看一下我们要解决一些问题: 声明加载状态 声明错误状态 错误打印到控制台 检查响应是否通过返回 200 response.ok 如果响应正常,响应转换为 json 并返回 promise 如果响应不正确...,抛出错误 finally 隐藏加载状态,以确保 Loading 即使发生错误也被隐藏 声明一个空依赖项数组,以便 useEffect 只运行一次 这只是一个简单示例,它忽略了许多其他相关问题...service 是最流行术语,我在下面也讨论了很多好替代名称,如 client 或 api。 要点是,所有的 HTTP 调用都是通过纯 JavaScript 函数处理,存储一个文件夹

4K10

一个简洁、强大、可扩展前端项目架构是什么样

而前者包含一个完整React全栈论坛项目: 用户登录页面 作者通过这个项目举例,展示了与「项目架构」相关13个方面的内容,比如: 文件目录该如何组织 工程化配置有什么推荐 写业务组件时该怎么规范...怎么做状态管理 项目中并不是所有状态都需要保存在「中心化store」,需要根据状态类型区别对待。...组件状态 对于组件局部状态,如果只有组件自身以及他子孙组件需要这部分状态,那么可以用useState或useReducer保存他们。...应用状态 与应用交互相关状态,比如「打开弹窗」、「通知」、「改变黑夜模式」等,应该遵循「状态尽可能靠近使用他组件原则,不要什么状态都定义为「全局状态」。...欢迎评论区交流项目架构最佳实践。 参考资料 [1] Bulletproof React: https://github.com/alan2207/bulletproof-react

1.1K30

Redux你是个好人,只是我们不合适

关注 ▲1钟前端▲ 和百万前端精英,一起向上生长 当聊到React状态管理方案,很多人第一反应是Redux。...如果没使用「状态管理」方案,常见方式是请求数据保存在组件state,如: function App() { const [data, updateData] = useState(null);...」方案如Redux,会将请求数据序列化保存在「全局状态。...用户交互中间状态 交互中间状态,比如isLoading、isOpen,同样保存在组件内部。 当可复用组件、或状态需要跨组件层级传递,通常使用Context API。...对于缓存,常见需求是: 数据状态,加载?加载完成?发生错误? 缓存失效更新 复用缓存数据 React技术栈,SWR、react-query都是优秀解决方案。

50810

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

,我们整个项目采用react-query 进行 url 管理, API 中有能够返回 isLoading 状态 hook 也就是我们数据请求完成状态,这也让我们可以利用这个 isLoading...同时会将 form 表单数据作为参数,因此我们采用 useMutateProject 这个 hook 来数据维护到 url const useMutateProject = editingProject...实现编辑,创建功能 我们点击编辑按钮时,首先需要弹出 modal 编辑信息点击保存,才需要调用发送请求 上代码 首先先处理 modal 显示和关闭 (截取下拉框关键代码)我们点击编辑按钮时,会触发...num 高端操作,其实就是一个转化成 boolean 类型方法 接着我们就可以 columns 中使用这个 Pin 组件了,星星状态改变时调用编辑方法,改变数据 pin 状态 {...useConfig 来编写这些生命周期函数 在这个 hook 我们使用了大量 any ,无关大雅 我们成功、提交、失败设置了相应回调,来处理不同请求情况 // 乐观更新,用来生产代码 hook

1.2K30

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

逻辑分开来,我们通过 props 向这两个组件传递了 onError 方法,组件可以通过调用这个方法来设置 error 状态值,再展示到页面上 在这里值得我们注意是,和类式组件不同,函数式组件会默认接收...,我们只需要用 styled(组件名) 即可 对于登录和注册页面,采用是 Antd Form 表单实现控制好盒子大小,基本不需要过多布局 <Form onFinish={handleSubmit...,这样代码看起来思路更加清晰 三、编写 auth-provider 文件 我们在这个文件来处理我们需要发送相关请求,首先,由于我们需要实现刷新仍保持登录状态效果,我们需要设置 token ,并且对于...()) }) 组件刚挂载时,我们先检查是否存在 token 如果有,我们就对他进行自动登录 // 保持用户登录状态组件挂载时候就调用 const bootstrapUser = async... error 状态,显示页面当中 总结 在这个登录注册页面当中,我们可以学到以下几点 context 状态管理 custom hook react 强大威力 当 custom hook

1.3K11

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

然而,当组件重新渲染时,这些数据并不总是需要重新计算或重新获取。有几种方法可以 React 实现数据缓存。...useCallback,允许您对耗费性能函数进行记忆化,以避免每次重新渲染时调用它们 只需传入一个函数和一个依赖数组,useCallback 仅在依赖一个值发生变化时重新计算记忆化函数 import...状态管理是另一种 React 应用程序缓存数据并使用它方法。...从 API 缓存数据可以存储我们状态管理,然后我们应用程序全局使用。尽管数据被缓存,但在刷新页面时,它将丢失数据,需要重新获取。...此外,您可以获取数据并将其存储 React 应用程序状态。 # React Query React Query 是一个库,用于处理 React 应用程序数据获取和管理。

1.2K20

为什么我不再用Redux了

Redux 是 React 生态系统革命性技术。它使我们能够全局范围内存储不可变数据,并解决了组件 prop-drilling 问题。...现在,前端开发很大一部负担来自于我们全局存储维护工作,我们还要确保这些存储不会遭受状态错误、数据非规范化和陈旧数据困扰。...如果我们不再在前端代码管理后端状态,而只是将其视为需要定期更新缓存会怎么样呢?前端视为从缓存读取内容简单显示层,我们代码就会变得更加易用,并且更适合纯前端开发人员阅读。...https://react-query.tanstack.com/docs/overview 现在,无论需要什么数据,你都可以 useQuery hook 与你设置唯一键(本例为“todos”)...React Query 和 SWR 大约是同一时间开始开发,并且以积极方式相互影响。 react-query 文档也对这两个库进行了彻底比较。

2.6K20

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

举个例子,下述例子,当fetchNote执行异步请求时,会由包裹NoteSuspense组件渲染「加载状态」。 当请求成功时,会重新渲染,此时note数据会正常返回。...: 当Note组件首次render,fetchNote发起请求,会throw promise,打断render流程 以Suspense fallback作为渲染结果 当promise状态变化重新触发渲染...use存在就是为了替换上述流程。 与当前React已经存在上述「promise流程」不同,use仅仅是个「原语」(primitives),并不是完整处理流程。...而在React,更新流程是从根组件开始,所以当数据返回,更新流程是从根组件从头开始。 改用async await方式势必对当前React底层架构带来挑战。...比如,类似SWR、React-Query这样请求库,就可以结合use,再结合自己实现请求缓存策略(而不是使用React提供cache方法) 各种状态管理库,也可以use作为其底层状态单元容器。

70730

Redux你是个好人,只是我们不合适

如果没使用「状态管理」方案,常见方式是请求数据保存在组件state,如: function App() { const [data, updateData] = useState(null);...」方案如Redux,会将请求数据序列化保存在「全局状态。...用户交互中间状态 交互中间状态,比如isLoading、isOpen,同样保存在组件内部。 当是可复用组件、或状态需要跨组件层级传递,通常使用Context API。...对于缓存,常见需求是: 数据状态,加载?加载完成?发生错误? 缓存失效更新 复用缓存数据 React技术栈,SWR、react-query都是优秀解决方案。这里以SWR举例: ?...横向来看,不同类型项目适合不同状态管理: 前端逻辑很重工具类项目(比如富文本编辑器),需要完备redo、ondo逻辑,Redux「单向不可变数据流」是不二选择。

1K20

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

如果我们需要在组件深入访问获取数据,由于于 useContext 已在服务端组件中被禁用 ,所以无法 fetch 放置 React Context 当中。...现在若需要在组件树内不同点处访问获取数据,推荐方法是必要时执行重新获取,再通过 React 执行重复数据删除。 这个 fetch 函数还会默认缓存数据,无论响应缓存标头如何。...恭喜了家人们,React DevTools 无法显示 React 服务端组件详细信息。我们无法浏览器检查组件以查看它使用具体 props 或子组件。...在我看来,最典型证明就是 Next.js 文档下拉列表——读者可以 App router(服务端组件)和 Pages router 之间随意选择。...总 结 服务端组件也许的确代表着服务端框架进步——或者至少达到生产就绪状态,应该有其进步意义。

22310
领券