当「状态」需要跨组件层级传递,通常使用Context API。 再大范围的「状态」会使用Redux这样的「全局状态管理方案」。...服务端状态 当我们从服务端请求数据: function App() { const [data, updateData] = useState(null); useEffect(async...这里,推荐使用React-Query管理服务端状态。 ? 另一个可选方案是SWR[1]。...所以我们需要告诉React-Query,userData query对应的缓存已经失效,需要更新: import { useQuery, queryCache } from 'react-query';...这样,React-Query就会重新请求userData对应query的数据。 总结 通过使用React-Query(或SWR)这样的数据请求库,可以将服务端状态从全局状态中解放出来。
前言 在项目中,通常都需要跟服务端进行异步的数据交互,基本都是用到axios这个库来做请求,嗯,毕竟拥有80k star,明星项目 接下来,我们来回顾下axios在项目中的使用 以查询用户信息为例,我们会这样封装...另外,现在的前端项目特别是单页面应用,会使用Flux、Redux、Mobox等状态管理库,会把组件间共享的数据都存放在状态管理库中,这些可以分为两类,一类是用户交互的中间状态,比如isLoading,isClose...解决了什么问题 服务端状态有以下特点: 存储在远端,本地无法直接控制 需要异步 API 来查询和更新 可能在不知情的情况下,被另一个请求方更改了数据,导致数据不同步 现有的状态管理库(如 Mobx、Redux...借助于这样的特性,我们就可以将所有跟服务端进行交互的数据从类似于 Redux 这样的状态管理工具中剥离,而全部交给 ReactQuery 来管理。...举个例子: import React from "react"; import { useQuery, queryCache } from "react-query"; import ".
链接地址:github.com/TanStack/qu… 简单使用 QueryClientProvider 首先,需要在组件外层定义一个queryClient作为组件操作和使用数据的一个共同容器,通过...new QueryClient({ queryCache?: QueryCache; mutationCache?: MutationCache; logger?...以上面Example组件为例,如果我们想在另一个组件访问这些数据。...最后 感谢你能看到这里,本文简单介绍了React-Query对服务端数据进行增删改查的功能实现,以及React-Query的一些其他能力,希望对你有用,React-Query的使用场景没有其他状态管理库那么广泛...笔者之后也会继续更新React-Query的其他使用场景,如果可以的话,不妨点个赞再走呢,这对我很重要。
目录 项目流程 项目流程 之前已经创建了项目,项目一启动,就会走main.js 这个文件 因为main.js 这个里面已经引入了App.vue组件,那么就会展示这个App.vue里面的东西 ?...在这个里面写自定义组件 ? 那么多个组件,A组件想要使用B组件里面的东西咋办? 因为每一个组件都会暴露出去,所以,在组件里面只需要引入想要使用的组件就可以了,引入的方法是 ?...就以上的3步,就可以在一个组件里面使用其他的组件, 以后就可以在每一个组件里面写不同的页面了。
React Query React Query 是一个很好的处理异步数据的库,可以将数据在 React 组件中使用。...} if (error) { return Error: {error}; } return {data}; }; 如果我们只从...我们可以看到这里有一定量的重复代码: 需要定义相同的data、error和 loading 状态 必须相应地更新不同的状态 数据在我们离开组件时立即被丢弃 如果使用 React Query,我们可以使用...React Query 的另一个好处是它的缓存机制。对于每个查询,我们需要提供相应的查询键,用于将数据存储在缓存中。 这也有助于请求的去重。...如果我们从多个地方调用相同的查询,它将确保 API 请求仅发生一次。
其次他并不限定你使用发起请求的库,所以你可以使用任何你想使用的请求方式,再次强调,他是一个管理高手,他把数据获取从混乱变成秩序,从复杂变成简单,从讨厌变成喜欢。...导致你的组件更容易出bug,很大可能会造成你忘记去修改或重置它们的状态,因为这些状态分布零散,同时这也会造成将来的代码是多么难以维护和扩展,这会是一场噩梦。...react-query 三大核心概念 Queries useQuery :发起单个请求 useQueries:发起多个请求 useInfiniteQuery:用于无限加载的列表,非常强大,让构建无限加载组件变得简单...复制代码 Mutation(突变) 用来创建/更新/删除数据时使用,最典型的例子就是一个todoList,对todo进行增删改相关的请求。使用useMutation hooks。...总结 如果你是用hooks开发组件的话,非常建议你使用,它会让你的开发之旅更自在。这个库非常强大,不可能一一解释,你可以根据自己的需要,自己去琢磨。
Oracle数据库来说,SQL的执行计划可以缓存在library cache中避免再次执行相同SQL发生硬解析(语法分析->语义分析->生成执行计划),SQL执行结果缓存在RESULT CACHE内存组件中...通过SQL文本是否完全一致来判断,包括大小写,空格等所有字符完全一模一样才可以共享,共享好处是可以避免硬解析,直接从QC获取结果返回给客户端,下面的两个SQL是不共享滴,因为一个是from,另一个是From...[mysqld] query_cache_size = 32M query_cache_type = 1 QueryCache使用 先搞点测试数据,分别对禁用和开启QueryCache下的场景进行测试...场景 在不使用QueryCache的时候,每次执行相同的查询语句,都要发生一次硬解析,消耗大量的资源。...开启queryCache场景 开启查询缓存时,查询语句第一次被执行时会将SQL文本及查询结果缓存在QC中,下一次执行同样的SQL执行从QC中获取数据返回给客户端即可。
当你处理突变时,另一个重要的概念是 QueryClient。...你可以从库中导入该 hook 并在组件中使用。该 hook 仅返回一个布尔值,表示应用程序中是否存在一个或多个获取请求。因此,你可以根据这些数据决定是否显示加载器。Easy peasy!...使用ReactQueryDevtools,你不需要关注环境是否渲染该组件,因为它默认提供了它。...在你的应用程序中使用该组件的好处在于,它允许在运行时查看 ReactQuery 中发生的情况。你可以检查状态中保存的数据,不同的查询有多少应用程序部分使用等等。...refetchOnMount:此选项很重要,可防止 hook 每次使用时重新加载数据 initialData:此选项用于从本地存储加载数据;initialData 接受一个返回初始值的函数;如果初始值已定义
(user); }, }); return { submit, isLoading, }; }; 在登录表单中,我们将使用 useLogin hook 来处理登录请求...auth-user"], queryFn: () => getAuthUser(), }); return { data, isLoading, }; }; 在布局组件中...为此,我们要创建一个组件,它将包装受保护的资源,并允许用户查看受保护的内容,只有在他们经过身份验证的情况下才能访问。...为了处理全局状态,我们将使用 Zustand,这是一个轻量级且非常简单易用的状态管理库。...-- ... --> ); }; export default DashboardCreateJobPage; 提交成功后可以看到通知: 另一个可以利用通知的地方是 API
前言 新年第一篇,与团队的小伙伴开启一波造轮子的系列 - 怎么样打造一个组件库 BOTY-DESIGN 首先组件库需要一个响亮的 title -> Boty-Design “BOTY 的全称是 battle...如上图所示,Vite 开发环境的构建速度比常规的 Webpack 要快很多,这也是为什么我们使用 Vite 来进行组件库开发的主要原因 “Vite 原理、源码解析相关博客,可以移步去掘金 Vite 专栏...dumi 配置 由于我们并没有使用 umi,所以采用官方推荐的第三方使用方法 // 安装模块。...而我是 Vue 的初学者,本着更深入学习的想法,就将 VUM 从 vue1 升级到 vue2。...这一次的轮子也不是从零开发,毕竟我们站在了 AntD 这个巨人的肩膀上,可以看得更远。 在这个项目中,除了技术之外,更多的可能是从设计、产品的角度来打磨这套产品。
但要理解这个库的本质,其实需要我们从后端的视角出发。 在后端看来,后端负责提供数据,前端负责展示数据,那么: 数据更新后,前端应该如何渲染? 数据失效后,前端应该如何渲染?...所以,React-Query还是有用武之地。 类似的,在全栈框架Next.js中,也推荐在CSR(客户端渲染)时使用同团队开发的缓存库SWR用于数据的同步操作。...之所以这么说是因为,之前的SSR只能返回HTML结构,所以SSR主要用于HTML从0到1的首屏渲染。 现在,SSR支持序列化数据。...虽然React Server Component直译叫服务端组件,看起来「最小可序列化」的模块应该是组件。 但是,只要遵循规范,其实「函数作用域」也能作为序列化的模块。...比如,在如下Next.js代码中,AddToCart组件在前端渲染,addItem方法的逻辑是操作数据库的后端逻辑: import { cookies } from 'next/headers';
前端缓存库的本质React-Query的定位是前端缓存库。如果从前端的视角来理解这个库,可能会认为它是axios加强版。但要理解这个库的本质,其实需要我们从后端的视角出发。...所以,React-Query还是有用武之地。类似的,在全栈框架Next.js中,也推荐在CSR(客户端渲染)时使用同团队开发的缓存库SWR用于数据的同步操作。...之所以这么说是因为,之前的SSR只能返回HTML结构,所以SSR主要用于HTML从0到1的首屏渲染。现在,SSR支持序列化数据。前端框架能够识别SSR的结果,就能操作这个结果进行细粒度的HTML更新。...虽然React Server Component直译叫服务端组件,看起来最小可序列化的模块应该是组件。但是,只要遵循规范,其实函数作用域也能作为序列化的模块。...比如,在如下Next.js代码中,AddToCart组件在前端渲染,addItem方法的逻辑是操作数据库的后端逻辑:import { cookies } from 'next/headers'; export
章节概览 morgan是express默认的日志中间件,也可以脱离express,作为node.js的日志组件单独使用。...本文由浅入深,内容主要包括: morgan使用入门例子 如何将日志保存到本地文件 核心API使用说明及例子 进阶使用:1、日志分割 2、将日志写入数据库 源码剖析:morgan的日志格式以及预编译 入门例子...核心API morgan的API非常少,使用频率最高的就是morgan(),作用是返回一个express日志中间件。...从文档上,并没有看到适合的扩展接口。于是查阅了下morgan的源码,发现实现起来非常简单。 回顾下之前日志写入本地文件的例子,最关键的两行代码如下。通过stream指定日志的输出流。...dbStream})); app.use(function(req, res, next){ res.send('ok'); }); app.listen(3000); 深入剖析 morgan的代码非常简洁,从设计上来说
自定义组件的三个特点 自定义组件的特点 自定义组件具有以下特点: 可组合:允许开发者组合使用系统组件、及其属性和方法。...可重用:自定义组件可以被其他组件重用,并作为不同的实例在不同的父组件或容器中使用。 数据驱动UI更新:通过状态变量的改变,来驱动UI的刷新。...从API version 9开始,该接口支持在ArkTS卡片中使用。 aboutToDisappear aboutToDisappear?...从API version 9开始,该接口支持在ArkTS卡片中使用。 onPageShow onPageShow?...注意事项 1.自定义组件只有被导出,才可以被别的组件使用 2.自定义组件中的变量,后期不修改的话,推荐用private修饰,提高程序性能。
React 是一个专注的组件库。因此,它对如何请求远程数据没有什么建议。如果要通过 HTTP 请求数据并将其发送到 Web API,可以考虑下面四种方法。...内联写法 集中管理 自定义 Hook react-query/swr 注意:在本文中,我将使用 fetch 进行 HTTP 调用,但是这些模式也适用于 Axios 之类的替代方法。...另外,如果你使用的是 GraphQ L,还可以考虑使用 Apollo 之类的其他不错的选择。这篇文章假设你正在调用传统的 REST API。 方式1:内联 这是最简单,最直接的选择。...在 React 组件中进行 HTTP 调用并处理响应。 fetch("/users").then(response => response.json()); 看起来很简单。...但是,您应该只需要方式4: 方式4:react-query/swr 使用 react-query或swr,可以为我们处理缓存、重试、重复查询等等。我不必维护自己的自定义Hook了。
chart.gif 列表是我们日常开发中经常会碰到的一类展示形式, 只是以不同的 UI 显示在用户面前,例如: 菜单,表格等,其中一些操作, 加载,重置,等是基本相同的,所以我们希望抽离这部分公共逻辑, 这里记录使用...) }, [ setEnd, updateQuery , queryCache] ) const util = { reset,...参数修改 QQ截图20200410191441.png 通常参数的修改也是用户交互的一部分, 简单的通过表单或开关修改, 这是我们需要将参数与组件绑定在一起,但这时就会遇到一个问题...// 如果使用中间变量做缓存,那内置query state 就没有多大意义了。...问题2 依赖 react hook 与 vue hook 明显的区别之一,react 需要我们手动关联并处理依赖,保证取值的正确及效率. // 使用useCallback 只在关联依赖更新时,
也会将数据从应用程序提交到服务器以接收某种响应。有几种方法可以将此数据发送/获取到 API 或服务器,可以使用内置的 API 或外部 npm 包来实现。...然而,当组件重新渲染时,这些数据并不总是需要重新计算或重新获取。有几种方法可以在 React 中实现数据缓存。...从 API 缓存的数据可以存储在我们的状态管理中,然后在我们的应用程序中全局使用。尽管数据被缓存,但在刷新页面时,它将丢失数据,需要重新获取。...# 安装 npm install react-query # 使用 import React from "react"; import { useQuery, QueryClient, QueryClientProvider...} from "react-query"; const queryClient = new QueryClient(); function Demo() { const { isLoading
从某种角度说,这验证了我们的方法从一开始就不对劲。...第三部分:解决方案——TanStack Query的设计哲学 TanStack Query(前身是React Query)的核心创新在于:它不是「另一个全局状态管理工具」,而是专门为服务端状态设计的同步引擎...更关键的是: ✅ 自动去重:同时多个组件请求同一个categoryId的数据?只发一次请求 ✅ 自动缓存:用户切换分类再切回来?...直接使用缓存,不会闪加载中 ✅ 智能刷新:5分钟内数据被认为是新鲜的,不会重新请求;超过5分钟后会后台刷新 ✅ Tab激活刷新:用户从其他Tab回来时会自动检查数据是否需要更新 ✅ 没有竞态条件:内部自动处理了请求的顺序问题...useQuery的组件都自动获得这些能力。