在多重使用情境間共享變更選項 (mutation options) 的最佳方式之一,就是使用 mutationOptions 輔助函式。在運行時,這個輔助函式僅會回傳你傳入的內容,但當與 TypeScript 搭配使用時,它能帶來許多優勢。你可以在單一位置定義變更操作的所有可能選項,同時還能獲得完整的型別推論與型別安全檢查。
export class QueriesService {
private http = inject(HttpClient)
updatePost(id: number) {
return mutationOptions({
mutationFn: (post: Post) => Promise.resolve(post),
mutationKey: ['updatePost', id],
onSuccess: (newPost) => {
// ^? newPost: Post
this.queryClient.setQueryData(['posts', id], newPost)
},
})
}
}
export class QueriesService {
private http = inject(HttpClient)
updatePost(id: number) {
return mutationOptions({
mutationFn: (post: Post) => Promise.resolve(post),
mutationKey: ['updatePost', id],
onSuccess: (newPost) => {
// ^? newPost: Post
this.queryClient.setQueryData(['posts', id], newPost)
},
})
}
}