Svelte Query 的 CreateMutationOptions:createMutation 完整配置类型解析与源码级实现

发布时间:2026/9/21 18:54:53

Svelte Query 的 CreateMutationOptions:createMutation 完整配置类型解析与源码级实现
Svelte Query 的 CreateMutationOptionscreateMutation 完整配置类型解析与源码级实现【免费下载链接】query Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue Query.项目地址: https://gitcode.com/GitHub_Trending/qu/query导读CreateMutationOptions是 tanstack/svelte-query 中createMutation的选项类型别名它规定了 Svelte 应用中一切变更操作创建、更新、删除数据或执行服务端副作用的配置契约。本文从该类型的定义出发逐一解析其四个泛型参数、继承自核心包的十余个配置字段并结合 createMutation.svelte.ts 的实现与类型测试说明这些选项在响应式环境中的真实运行机制。读完本文你将能写出类型完备、推断精准、支持乐观更新与全局状态查询的 Svelte Query 变更逻辑。CreateMutationOptions 的定义与定位在 packages/svelte-query/src/types.ts 中该类型定义如下/** Options for createMutation */ export type CreateMutationOptions TData unknown, TError DefaultError, TVariables void, TOnMutateResult unknown, OmitKeyof MutationObserverOptionsTData, TError, TVariables, TOnMutateResult, _defaulted 官方类型参考页对其的说明只有一句话Options for createMutationcreateMutation的选项。从源码结构看它本质上是对核心包tanstack/query-core中MutationObserverOptions的再封装唯一的变化是借助OmitKeyof工具类型剔除内部的_defaulted标记字段——该字段是查询/变更观察器在内部完成选项默认值填充后设置的内部标志源码位于 packages/query-core/src/types.ts对外部调用方没有意义因此从公共 API 中隐藏。OmitKeyof与MutationObserverOptions均从tanstack/query-core导入见 types.ts这体现了 svelte-query 作为框架适配层、query-core 承载全部通用逻辑的分层设计。四个类型参数含义与默认值原类型参考页对每个泛型参数给出了默认值逐项说明如下类型参数默认值含义TDataunknownmutationFn成功 resolve 后的数据类型会作为onSuccess第一个参数与返回结果中data字段的类型TErrorDefaultError变更失败时的错误类型默认是核心包定义的DefaultError即Error会作为onError第一个参数与结果中error字段的类型TVariablesvoidmutationFn接收的变量入参类型决定mutate/mutateAsync的入参类型TOnMutateResultunknownonMutate回调的返回值类型用于乐观更新时携带上下文context失败时透传给onError作为第三个参数TOnMutateResult乐观更新的上下文通道TOnMutateResult是四个参数中最具实战意义的一个。它的典型用法是在onMutate中先取消进行中的查询、保存旧数据并提前写入新数据乐观 UI然后把旧数据作为返回值若变更失败onError通过第三个参数拿到该返回值并回滚。这一模式被封装进类型系统createMutation.test-d.ts 中的类型测试验证了onMutate返回{ token: string }时onSuccess收到类型为{ token: string }而onError收到{ token: string } | undefined——因为onError在onMutate失败或未定义时确实可能拿到undefined。完整选项字段清单继承自 MutationObserverOptions由于CreateMutationOptions直接展开自MutationObserverOptions后者的全部字段即前者可用的全部配置。MutationObserverOptions在 packages/query-core/src/types.ts 中定义它先继承MutationOptions的全部字段再额外增加throwOnError。逐字段说明MutationOptions 基础字段mutationFn?: MutationFunctionTData, TVariables执行变更的核心函数接收(variables, context)返回PromiseTData。context为MutationFunctionContext包含client、meta与可选的mutationKey。mutationKey?: MutationKey变更的唯一标识只读数组用于配合useMutationState跨组件定位该变更。onMutate?: (variables, context) PromiseTOnMutateResult | TOnMutateResult变更执行前同步触发常用于乐观更新与副作用准备。onSuccess?: (data, variables, onMutateResult, context) ...变更成功后触发。onError?: (error, variables, onMutateResult | undefined, context) ...变更失败后触发onMutateResult在onMutate未返回或自身抛错时为undefined。onSettled?: (data | undefined, error | null, variables, onMutateResult | undefined, context) ...无论成败都会触发适合做收尾如失效查询。retry?: RetryValueTError失败重试次数或重试判定函数boolean | number | (failureCount, error) boolean。retryDelay?: RetryDelayValueTError重试间隔可为数值或基于failureCount与error计算延迟的函数。networkMode?: NetworkMode网络模式取值如online/offlineFirst/always控制离线时的执行策略。gcTime?: number变更从内存中被垃圾回收前的保留时间毫秒。meta?: MutationMeta附加到变更上的任意元数据可在MutationFunctionContext中读取。scope?: MutationScope变更作用域{ id: string }用于控制变更的并发隔离。_defaulted?: boolean内部字段已被OmitKeyof从公共类型中剔除。MutationObserverOptions 独有字段throwOnError?: boolean | ((error: TError) boolean)当为true或判定函数返回true时mutateAsync返回的 Promise 会以错误拒绝而非吞掉错误在 Svelte 中还可与错误边界error boundary配合使用。该字段是MutationObserverOptions相比MutationOptions唯一的新增项见 types.ts。与 createMutation 的配合选项的响应式形态CreateMutationOptions并非孤立存在它是createMutation的第一个参数类型。在 createMutation.svelte.ts 中export function createMutation TData unknown, TError DefaultError, TVariables void, TContext unknown, ( options: AccessorCreateMutationOptionsTData, TError, TVariables, TContext, queryClient?: AccessorQueryClient, ): CreateMutationResultTData, TError, TVariables, TContext两个关键点选项是响应式读取器options的类型是AccessorT () T见 types.ts即一个返回CreateMutationOptions的函数。这意味着你传入的配置对象本身可以是 Svelte 5 runes 的派生值选项变化时会自动生效。可指定自定义 QueryClient第二个参数同样是AccessorQueryClient缺省时使用最近上下文中的QueryClient。运行时实现要点从 createMutation.svelte.ts 的实现可以推断其底层机制内部持有MutationObserver来自tanstack/query-core其构造与重建由watchChanges监听client变化触发$effect.pre中调用observer.setOptions(options())使选项的响应式更新同步到观察器返回结果通过Proxy包装mutate与mutateAsync被注入结果对象mutateAsync实际复用观察器自身的mutate返回 Promise而mutate则调用后catch(noop)吞掉未处理的拒绝状态字段isPending、status、data、error等由观察器的订阅回调批量写入通知经由notifyManager.batchCalls合并。最小可用示例script langts import { createMutation, useQueryClient } from tanstack/svelte-query const queryClient useQueryClient() const addMutation createMutation(() ({ mutationFn: addTodo, // (variables: string) PromiseTodo onSuccess: () queryClient.invalidateQueries({ queryKey: [todos] }), })) /script {#if addMutation.isPending} 正在添加… {:else if addMutation.isError} 添加失败{addMutation.error.message} {:else} button onclick{() addMutation.mutate(Item)}Add/button {/if}此示例中无需显式标注任何泛型——TData、TVariables均从mutationFn自动推断。类型测试证实了以下推断行为见 createMutation.test-d.tsmutationFn: () Promise.resolve(data)时data推断为string | undefinederror为DefaultError | nullmutationFn: (vars: { id: string }) ...时mutate仅接受{ id: string }无参mutationFn时TVariables默认voidmutate()可不带参数调用自定义错误类可通过createMutationstring, CustomError(...)显式传入error随之推断为CustomError | nullmutateAsync的返回类型与mutationFn的 Promise 泛型一致如Promisenumber。对应的运行时测试位于 createMutation.svelte.test.ts覆盖了reset清除错误、多次mutate的onSuccess/onSettled触发次数、failureCount/failureReason在多轮调用间的正确归零与更新以及QueryClient切换时观察器重建等行为。共享选项mutationOptions 与类型的关系当需要在多个createMutation调用点之间共享同一份CreateMutationOptions或希望借助mutationKey在组件外查询变更状态时官方推荐mutationOptions辅助函数。它提供两个重载见 mutationOptions.md要求mutationKey的重载返回WithRequiredCreateMutationOptions..., mutationKey适合配合useMutationState实现全局保存中…指示器不要求mutationKey的重载返回OmitCreateMutationOptions..., mutationKey适合单纯共享配置。script langts import { mutationOptions, createMutation } from tanstack/svelte-query const createPostOptions mutationOptions({ mutationKey: [posts, create], mutationFn: createPost, }) const mutation createMutation(() createPostOptions) /script button onclick{() mutation.mutate({ title: Hello })}Create/buttonmutationOptions的返回值本身就是CreateMutationOptions的派生形态可直接塞进createMutation的Accessor中二者类型天然兼容。相关类型链围绕CreateMutationOptionstypes.ts 中还定义了一组配套类型理解它们有助于掌握完整类型系统CreateMutationResultTData, TError, TVariables, TOnMutateResultcreateMutation的返回值在核心包MutationObserverResult基础上重写了mutateCreateMutateFunction返回void并追加mutateAsyncCreateMutateAsyncFunction返回 Promise。CreateMutateFunction/CreateMutateAsyncFunction分别对应同步触发与可等待的触发函数形态。MutationStateOptions与MutationTypeFromResult服务于useMutationState的过滤器与类型提取。结语CreateMutationOptions虽只是一行类型别名却是 svelte-query 变更体系createMutation→MutationObserver→Mutation的配置入口。理解它的四个泛型参数与全部字段意味着你同时理解了 query-core 中MutationObserverOptions的能力边界再结合Accessor包裹的响应式形态即可在 Svelte 5 的 runes 体系下写出类型安全、状态可控、可全局追踪的完整变更方案。若要深入底层执行与重试细节可继续阅读 packages/query-core/src/mutationObserver.ts 与 packages/query-core/src/mutationCache.ts 中的观察器与缓存实现。【免费下载链接】query Powerful asynchronous state management, server-state utilities and data fetching for the web. TS/JS, React Query, Solid Query, Svelte Query and Vue Query.项目地址: https://gitcode.com/GitHub_Trending/qu/query创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ty 规则参考手册深度解读:133 条 Python 类型检查规则的原理、默认级别与配置实战

ty 规则参考手册深度解读:133 条 Python 类型检查规则的原理、默认级别与配置实战

2026/9/10 1:35:02

ty 规则参考手册深度解读:133 条 Python 类型检查规则的原理、默认级别与配置实战 【免费下载链接】ruff An extremely fast Python linter and code formatter, written in Rust. 项目地址: https://gitcode.com/GitHub_Trending/ru/ruff 本文以仓库内 crate…

7.5 BO 到 VA 的映射/解映射/重映射

7.5 BO 到 VA 的映射/解映射/重映射

2026/9/21 21:27:12

上一篇 7-4《GPUVM 页表的创建与销毁》 说明了页表 BO 如何按需创建与安全回收。页表本身就绪后,还需要把一个 BO 关联到指定的 GPU 虚拟地址——这正是本篇的主题。 本篇从用户态 DRM_IOCTL_AMDGPU_GEM_VA 入口出发,分析 MAP / UNMAP / CLEAR / REPLACE 四种操作在内核侧如…

鼎捷E10培训PPT制作指南:如何让制造企业ERP培训真正落地

鼎捷E10培训PPT制作指南:如何让制造企业ERP培训真正落地

2026/9/10 1:25:02

简介:这是一套面向鼎捷E10 ERP系统学习者及企业信息化实施人员的培训课件合集,聚焦进销存、财务、生产计划、成本核算、资产管理等核心业务模块,适合ERP实施顾问、企业内部关键用户以及初次接触E10的新手按模块系统入门。资源共含71个文件&am…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/21 18:38:46

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/21 18:41:09

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/21 18:36:40

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/21 18:37:26

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/21 18:40:29

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/21 18:36:17

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/9 16:28:52

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

2026/9/8 3:19:39

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

2026/9/8 4:00:23

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…