Normy快速上手:5分钟搞定React Query数据自动规范化与缓存自动更新
Normy快速上手5分钟搞定React Query数据自动规范化与缓存自动更新【免费下载链接】normyAutomatic normalization and data updates for data fetching libraries (react-query, vue-query, trpc, swr, rtk-query and more)项目地址: https://gitcode.com/gh_mirrors/no/normyNormy 是一款开源的数据自动规范化库专为 React Query、SWR、RTK Query 等数据获取库设计。它能把你的应用数据按 id 自动规范化存储并在 mutation 成功后自动更新所有相关缓存让你彻底告别手写setQueryData的繁琐逻辑。一、Normy 是什么解决什么痛点 如果你用过 React Query一定熟悉这样的场景用户编辑了一本书的名字你需要手动更新书籍列表查询再手动更新书籍详情查询。查询越多这段onSuccess代码就越长而且你必须清楚知道哪些查询需要被更新。Normy 就是来解决这个问题的自动规范化所有带id字段的对象无论嵌套多深都会按 id 存入一个全局的规范化存储中自动缓存更新mutation 返回{ id: 1, name: 新名字 }时Normy 会自动找出所有包含id: 1的查询并同步更新它们多库支持官方已提供 React Query、SWR、RTK Query 的集成核心逻辑位于packages/normy/目录基于它的normy/core还可以轻松扩展其他库简单说数据改一处缓存处处同步。二、5分钟快速上手React Query 数据规范化三步走第 1 步安装 npm 包npm install normy/react-query 最新版支持 React Query 5 和 tRPC 11如果你还在用旧版本 React Query需要安装normy/react-query0.10.2。normy/core会作为依赖自动安装无需手动处理。第 2 步用 Provider 包裹应用只需在QueryClientProvider外层再套一层QueryNormalizerProvider并传入queryClientQueryNormalizerProvider queryClient{queryClient} QueryClientProvider client{queryClient} App / /QueryClientProvider /QueryNormalizerProvider第 3 步删除手动的 onSuccess 更新代码从此 mutation 不再需要写queryClient.setQueryData(...)——Normy 会自动完成规范化存储的合并和所有依赖查询的刷新。整个 React Query 集成实现非常轻薄核心只有两个文件Provider 封装 和 normalizer 创建逻辑。三、缓存自动更新的原理3个前提条件Normy 的自动更新基于id 追踪机制内部实现可参考 create-normalizer.ts、normalize.ts 和 denormalize.ts。要让它正常工作你的数据需满足 3 个条件#条件说明1有标准化的标识字段通常是id若用_id可通过getNormalizationObjectKey: obj obj._id自定义2id 在全应用范围内唯一若 id 只在同类型对象内唯一可拼接类型后缀如obj.id obj.type3相同 id 的对象结构一致同一个书在 A 查询里叫title在 B 查询里不能叫name只要满足这些任何嵌套层级的对象都会被规范化——父对象中只保留对子对象的引用子对象独立存储这也是它能跨查询同步更新的根本原因。四、什么时候仍需手动更新⚠️ 诚实说明顶层数组的新增/删除/排序仍需手动处理。比如删除一本书Normy 无法知道你要从哪个查询的列表中移除它新增一本书它也不知道该插入到哪个列表、哪个位置。但数组内部对象的更新仍然是自动的——例如书籍的likedByUsers列表整体变更会正常自动同步。五、进阶技巧调试、手动更新与性能优化开发调试给normalizerConfig传入devLogging: true控制台会打印每次查询的规范化明细生产环境自动关闭✋手动更新缓存收到 WebSocket 事件时可用useQueryNormalizer()的setNormalizedData({ id: 1, name: 新名字 })一键同步所有相关查询⚡按需规范化数据量极大或不需更新的查询可用meta: { normalize: false }单独关闭性能友好Normy 内置了结构性共享structural sharing优化——若重新请求的数据与现有缓存完全一致会跳过规范化相同 id 的数据若无实际变化也不会触发查询更新六、动手体验运行官方示例仓库自带 4 个可运行的示例项目位于examples/目录分别演示了 react-query、swr、rtk-query 和 trpc 的完整用法其中 examples/react-query/src/components/app.jsx 是一个带书籍列表、编辑、新增功能的完整 Demo非常适合上手研究。git clone https://gitcode.com/gh_mirrors/no/normy cd normy/examples/react-query npm install npm start打开localhost:3000试着修改一本书的名字你会看到列表和详情页的缓存被自动同步更新——这就是 Normy 的魔力。✨总结如果你的项目中 React Query 查询众多、mutation 后手动维护缓存的代码让你头疼Normy 用一行 Provider 包裹就能换来数据改一处、缓存处处同步的清爽体验。5 分钟接入代码量立省一大截。【免费下载链接】normyAutomatic normalization and data updates for data fetching libraries (react-query, vue-query, trpc, swr, rtk-query and more)项目地址: https://gitcode.com/gh_mirrors/no/normy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

D-Zone 隐私与安全指南:Bot Token 防护与频道监控的最佳实践清单

D-Zone 隐私与安全指南:Bot Token 防护与频道监控的最佳实践清单

D-Zone 隐私与安全指南:Bot Token 防护与频道监控的最佳实践清单 【免费下载链接】d-zone An ambient life simulation driven by user activity within a Discord server 项目地址: https://gitcode.com/gh_mirrors/dz/d-zone D-Zone 是一款由 Discord 服务…

2026/8/23 15:28:38 阅读更多 →
cmkr源码通配符(Glob)完整教程:用**.cpp模式免逐个列文件构建整个项目

cmkr源码通配符(Glob)完整教程:用**.cpp模式免逐个列文件构建整个项目

cmkr源码通配符(Glob)完整教程:用**.cpp模式免逐个列文件构建整个项目 【免费下载链接】cmkr Modern build system based on CMake and TOML. 项目地址: https://gitcode.com/gh_mirrors/cm/cmkr cmkr 是一款基于 CMake 和 TOML 的现代构建系统,本…

2026/8/22 15:04:15 阅读更多 →
Hammox迁移清单:Mox用户如何3步无痛升级到自动化契约测试

Hammox迁移清单:Mox用户如何3步无痛升级到自动化契约测试

Hammox迁移清单:Mox用户如何3步无痛升级到自动化契约测试 【免费下载链接】hammox 🏝 automated contract testing via type checking for Elixir functions and mocks 项目地址: https://gitcode.com/gh_mirrors/ha/hammox Hammox 是一个面向 El…

2026/8/23 16:16:36 阅读更多 →

最新新闻

AI智能体长期记忆系统MRMS:多分辨率记忆架构设计与工程实践

AI智能体长期记忆系统MRMS:多分辨率记忆架构设计与工程实践

1. 项目概述:当AI智能体需要“长期记忆”最近在折腾AI智能体(AI Agent)项目时,我遇到了一个几乎所有开发者都会头疼的经典问题:“健忘症”。比如,你设计了一个客服Agent,它和用户聊了十几轮&…

2026/8/23 18:05:36 阅读更多 →
C++非类型模板参数:编译期常量与类型系统的深度解析

C++非类型模板参数:编译期常量与类型系统的深度解析

1. 项目概述&#xff1a;非类型模板参数是什么&#xff1f; 在C模板编程的日常里&#xff0c;我们最熟悉的大概是类型模板参数&#xff0c;比如 template<typename T> 里的 T &#xff0c;它能代表 int 、 std::string 或者任何用户自定义的类。但今天要聊的“非…

2026/8/23 18:05:36 阅读更多 →
泰拉瑞亚灾厄Mod安装与汉化全指南:解决版本兼容与崩溃问题

泰拉瑞亚灾厄Mod安装与汉化全指南:解决版本兼容与崩溃问题

在实际游戏模组&#xff08;Mod&#xff09;社区中&#xff0c;泰拉瑞亚&#xff08;Terraria&#xff09;的“灾厄”&#xff08;Calamity&#xff09;模组以其庞大的新内容、高难度挑战和独特的艺术风格&#xff0c;吸引了大量寻求深度体验的玩家。然而&#xff0c;许多玩家在…

2026/8/23 18:05:36 阅读更多 →
Claudian 避坑指南:把 Claude Code 装进 Obsidian 知识库的完整手册

Claudian 避坑指南:把 Claude Code 装进 Obsidian 知识库的完整手册

Claudian 避坑指南&#xff1a;把 Claude Code 装进 Obsidian 知识库的完整手册 【免费下载链接】claudian An Obsidian plugin that embeds Claude Code/Codex as an AI collaborator in your vault 项目地址: https://gitcode.com/GitHub_Trending/cl/claudian Claudi…

2026/8/23 18:05:36 阅读更多 →
Godot 游戏存档管理实战:多存档槽从设计到落地的完整指南

Godot 游戏存档管理实战:多存档槽从设计到落地的完整指南

Godot 游戏存档管理实战&#xff1a;多存档槽从设计到落地的完整指南 【免费下载链接】godot Godot Engine – Multi-platform 2D and 3D game engine 项目地址: https://gitcode.com/GitHub_Trending/go/godot "继续游戏"按钮后面只有一个覆盖写&#xff0c;…

2026/8/23 18:05:36 阅读更多 →
高斯整数与圆上整点问题:从费马平方和定理到算法实现

高斯整数与圆上整点问题:从费马平方和定理到算法实现

1. 问题引入&#xff1a;从一道经典数论题说起 最近在整理数论相关的算法模板时&#xff0c;又翻到了洛谷上那道经典的 P2508 题——“圆上的整点”。这道题初看描述很简单&#xff1a;给定一个以原点为圆心、半径为 r 的圆&#xff0c;求圆周上横纵坐标均为整数的点有多少个…

2026/8/23 18:04:36 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →