Tauri Specta + TanStack Query:为 Tauri 命令自动生成类型安全 Query 钩子的完整教程 Tauri Specta TanStack Query为 Tauri 命令自动生成类型安全 Query 钩子的完整教程【免费下载链接】tauri-spectaCompletely typesafe Tauri commands项目地址: https://gitcode.com/gh_mirrors/ta/tauri-spectaTauri Specta是 Rust 生态里最受欢迎的「完全类型安全 Tauri 命令」方案而它新增的tauri-specta-query模块能一键为 Tauri 命令生成TanStack Query的类型安全钩子与缓存 Key。本教程面向新手带你从零理解并跑通这套组合告别手写useQuery和拼 query key 的繁琐工作。一、为什么 Tauri 命令需要类型安全的 Query 钩子在 Tauri 应用中前端调用后端命令通常分三步前端用invoke发起调用字符串命令名容易拼错返回值是any拿到什么类型全凭感觉想缓存、轮询、失效刷新时还要再套一层 TanStack Query手写queryKey。任何一步出错都只能到运行时才发现。而Tauri Specta TanStack Query组合后✅ 命令名拼错 → 编译期报错✅ 参数/返回值类型错误 → TypeScript 直接标红✅queryKey自动生成缓存失效不再手拼数组✅ 读写命令自动区分成queries查询和mutations变更。核心能力来自独立 crate tauri-specta-query实现源码见 crates/tauri-specta-query/src/lib.rs。二、快速上手三步生成类型安全 Query 钩子官方自带完整示例位于 examples/tanstack-query/可对照 examples/tanstack-query/src-tauri/src/main.rs 阅读。步骤 1Rust 侧给命令打上两个注解每个命令需要同时标注#[tauri::command]和#[specta::specta]#[tauri::command] #[specta::specta] fn get_user(id: u32) - String { format!(user-{id}) }步骤 2用 CommandSet 把命令分为查询与变更这是本模块的精华所在——读数据的命令归入 queries改数据的命令归入 mutationslet commands CommandSet::new( collect_commands![get_user], // 查询 collect_commands![rename_user], // 变更 ) .build(TanstackQueryFramework::React);命令默认生成lowerCamelCase的访问器名也可以通过function_casing改成蛇形命名等风格只影响前端属性名不改动 IPC 命令字符串。步骤 3导出 bindings前端直接消费开发调试时把生成的内容导出为bindings.tsbuilder.export( Typescript::default().with_raw(query_bindings), ../src/bindings.ts, )之后在 React 组件里就是熟悉的写法const user useQuery(queries.getUser(1)); const renameUser useMutation({ ...mutations.renameUser(), onSuccess: () queryClient.invalidateQueries({ queryKey: queryKeys.getUser(1), }), });queryKey无需手写——生成器已经按「命令名 参数」组装好了参数一变缓存自动区分。三、生成的 bindings.ts 里有什么打开示例生成的 examples/tanstack-query/src/bindings.ts末尾会多出四个导出对象导出作用典型用途queries每个查询命令对应一个函数返回queryOptions直接传给useQuerymutations每个变更命令对应一个函数返回mutationOptions直接传给useMutationqueryKeys生成缓存 key支持部分参数前缀匹配invalidateQueries精确失效mutationKeys生成变更的 key监听/清理变更缓存比如queries.helloWorld的签名与原始命令完全一致queryKey自动为[helloWorld, ...args]。参数传多传少TypeScript 都会即时提示。四、支持的前端框架不止 ReactTanstackQueryFramework提供六个变体React、Solid、Vue、Angular、Svelte、Preact生成器会自动选择对应框架的 TanStack Query 包。其中 Svelte 版本返回的是「选项生成函数」不产生 import天然适合 Svelte 的 runes 风格。你的前端项目只需安装对应依赖示例项目 examples/tanstack-query/package.json 中使用的是tanstack/react-queryv5。五、进阶技巧事件、常量与语义类型CommandSet与普通 tauri-specta Builder 完全兼容构建前可以继续叠加事件类型.events(collect_events![...])生成类型安全的emit/listen辅助函数常量导出.constant(universalConstant, 42)让前端直接获得as const类型语义类型.semantic_types(...)让Date、Uint8Array、URL在 IPC 两端自动还原为真实 JS 对象而不是裸字符串。六、常见问题FAQQ1改了 Rust 命令后前端类型没更新bindings 文件只在调试构建时导出重新运行tauri dev即可重新生成bindings.ts。Q2mutation 的参数怎么传有参数的变更命令参数会打包成一个对象传给mutate无参命令则不接收输入。Q3能和普通 tauri-specta 混用吗可以。CommandSet::build会返回一个标准 Builder你仍可用它挂载事件、导出普通命令绑定两类绑定可共存于同一文件。小结Tauri Specta 让 Tauri 命令从「字符串调用」升级为「编译期类型契约」而 tauri-specta-query 在此基础上再进一步一次声明命令同时收获类型安全的 Query 钩子、变更钩子和缓存 Key。如果你正在用 TanStack Query 管理 Tauri 应用的状态这套组合值得一试——少写样板代码少踩运行时坑。【免费下载链接】tauri-spectaCompletely typesafe Tauri commands项目地址: https://gitcode.com/gh_mirrors/ta/tauri-specta创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考