使用 React Query 简化前端 CRUD 应用的数据获取
构建前端 CRUD 应用起初很容易,但随着功能的增加,复杂性会迅速提升。对于每个 API 端点,都需要处理状态管理、同步、缓存和错误处理。本文将介绍一个名为 React Query 的库,以及它如何帮助解决所有这些问题。该库自称是“缺失的数据获取库”,为你的 React 应用提供“服务器状态管理”。
我们将使用一个完整的 React Query 演示项目来学习该库提供的核心功能。然后,你就可以将这些知识应用到自己的项目中。首先,在开始项目设置之前,让我们先了解一些内容。
关键要点
- React Query 3 简化了 React 应用中的状态管理和数据获取,高效地处理缓存、同步和错误管理。
- 该库适用于熟悉 React、React Router 和 REST API 的中高级开发者。
- React Query 3 在 2.x 版本的基础上增加了新功能和改进,并为升级用户提供了迁移指南。
- 演示项目中演示的关键功能包括基本查询、分页查询和无限查询,以及创建、更新和删除操作。
- React Query 的 Devtools 实用程序通过实时可视化内部状态和流程来辅助调试。
-
cacheTime
和staleTime
等配置选项通过管理数据新鲜度和缓存持续时间来优化性能。 - 该库支持无限滚动和复杂状态依赖等高级场景,增强了用户体验和开发者体验。
关于 React Query 3
React Query 是由 Tanner Linsey 创建的一个开源项目。最新的主要版本 React Query 3 于 2020 年 12 月正式发布。在这个新版本中,添加了新功能并改进了现有功能。
需要注意的是,与之前非常流行的 React Query 2.x 版本相比,它有一些重大更改。有一个迁移指南清楚地解释了这些更改,因为你可能会遇到很多针对旧版本编写的过时教程。
新版本提供了巨大的改进,许多之前报告的错误都已解决。3.x 版本虽然已准备好用于生产环境,但仍在不断开发中,并定期修复新发现的错误。
前提条件
本文面向中高级前端开发者,他们已经掌握了以下方面的基本技能和知识:
- React
- React Router
- React Hooks
- REST API 数据获取
在你的开发机器环境中,你需要设置以下内容:
- Node.js
- Git
- REST 客户端,例如 Postman、Insomnia 或 VS Code 的 REST 扩展
关于项目
我们将分析的演示项目是一个 React 前端应用程序,它将使用 React Query 获取 REST JSON API 服务器提供的数据。该应用程序仅由五个页面组成,展示了 React Query 提供的功能。这些功能包括:
- 基本查询
- 分页查询
- 无限查询
- 创建操作
- 更新操作
- 删除操作
React Query 提供了更多功能,但本文篇幅有限,无法一一介绍。以下是我们将使用的应用程序的预览:
项目设置
在我们开始设置之前,我认为最好先简要了解一下项目中使用的其他依赖项。这些包括:
- Vite:一个非常快速的构建工具
- WindiCSS:一个非常快速的 Tailwind CSS 编译器
- React Hook Form:一个使用 React hook 的表单构建器和验证库
- React Modal:一个可访问的模态组件
- Axios:一个基于 Promise 的浏览器 HTTP 客户端
- JSON Server:一个完整的伪造 REST API 服务器
要在你自己的机器上设置 React Query 演示应用程序,请执行以下说明:
# 克隆项目 git clone git@github.com:sitepoint-editors/react-query-demo.git # 导航到项目目录 cd react-query-demo # 安装包依赖项 npm install # 为 json-server 设置数据库文件 cp api/sample.db.json api/db.json # 启动 json-server npm run json-server
json-server 使用的数据库文件包含一个用户数组。当你执行 npm run json-server
时,一个伪造的 API 服务器将在端口 3004 上启动。执行 GET 请求将产生以下示例 JSON 响应:
[ { "id": 1, "first_name": "Siffre", "last_name": "Timm", "email": "stimmes0@nasa.govz", "gender": "Male" }, { "id": 2, "first_name": "Fonzie", "last_name": "Coggen", "email": "fcoggen1@weather.com", "gender": "Female" }, { "id": 3, "first_name": "Shell", "last_name": "Kos", "email": "skos2@prweb.com", "gender": "Female" } ]
接下来,启动将运行前端代码的开发服务器:
# 在另一个终端中,启动 React 开发服务器 npm run dev
转到你的浏览器并打开 http://localhost:3000
以访问应用程序。你应该会有与上面预览中相同的体验。请确保执行以下任务,以便彻底探索应用程序的功能:
- 查看基本查询页面(主页)。
- 访问分页页面并与“上一页”和“下一页”按钮进行交互。
- 访问无限页面并与“加载更多”按钮进行交互。
- 返回基本查询页面并单击“创建用户”按钮。你将被定向到“创建用户”页面。填写表单并单击“保存”按钮。
- 在用户表中,找到“编辑”图标。单击它。这将带你到“编辑用户”页面。进行任何你喜欢的更改,然后点击“保存”按钮。
- 在用户表中,找到“删除”图标。单击它。这将启动一个模态对话框,要求你确认删除操作。单击“删除”按钮以确认。
完成所有上述任务后,我们可以开始对项目进行分解。请查看项目结构,以便了解每个组件和视图的位置。我将在本文中提供这些组件的简化版本,以便你了解在项目中使用 React Query 的基础知识。
安装 React Query
可以使用以下命令在空白或现有 React 项目中安装 React Query:
# 克隆项目 git clone git@github.com:sitepoint-editors/react-query-demo.git # 导航到项目目录 cd react-query-demo # 安装包依赖项 npm install # 为 json-server 设置数据库文件 cp api/sample.db.json api/db.json # 启动 json-server npm run json-server
该包包含你所需的一切——包括 Devtools 实用程序功能,我们将在后面的部分中探讨。安装包后,你需要更新你的顶级组件——App.jsx
——如下所示:
[ { "id": 1, "first_name": "Siffre", "last_name": "Timm", "email": "stimmes0@nasa.govz", "gender": "Male" }, { "id": 2, "first_name": "Fonzie", "last_name": "Coggen", "email": "fcoggen1@weather.com", "gender": "Female" }, { "id": 3, "first_name": "Shell", "last_name": "Kos", "email": "skos2@prweb.com", "gender": "Female" } ]
QueryClientProvider
的任何子组件都将能够访问 React Query 库提供的 hook。我们将在本文中使用的 hook 是:
useQuery
useInfiniteQuery
useMutation
useQueryClient
以下是一个更新后的(简化版)App.jsx
,其中包含我们将使用的子视图:
# 在另一个终端中,启动 React 开发服务器 npm run dev
(后续内容,请根据你的要求继续翻译剩余部分,包括UI组件、基本查询、分页查询、无限查询、Mutations等章节。)
以上是REACT查询3:获取和管理数据的指南的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中