译零 TransZero · TanStack Query 中文文档
主站

快速入门

更新于 2026-11-02 Angular 查看英文原文 ↗

重要:该库目前处于实验阶段。这意味着破坏性变更可能出现在次要版本(minor)和补丁版本(patch)中。请谨慎升级。如果你在实验阶段将此库用于生产环境,请将版本锁定到补丁级版本,以避免意外的破坏性变更。

如果你需要一个完整可运行的示例,请参考我们的 基础 CodeSandbox 示例。

向应用提供 QueryClient

TypeScript
1import { provideHttpClient } from '@angular/common/http'2import {3  provideTanStackQuery,4  QueryClient,5} from '@tanstack/angular-query-experimental'6 7bootstrapApplication(AppComponent, {8  providers: [provideHttpClient(), provideTanStackQuery(new QueryClient())],9})

或在基于 NgModule 的应用中:

TypeScript
1import { provideHttpClient } from '@angular/common/http'2import {3  provideTanStackQuery,4  QueryClient,5} from '@tanstack/angular-query-experimental'6 7@NgModule({8  declarations: [AppComponent],9  imports: [BrowserModule],10  providers: [provideHttpClient(), provideTanStackQuery(new QueryClient())],11  bootstrap: [AppComponent],12})13export class AppModule {}

包含查询和修改的组件

angular-ts
1import { Component, Injectable, inject } from '@angular/core'2import { HttpClient } from '@angular/common/http'3import { lastValueFrom } from 'rxjs'4 5import {6  injectMutation,7  injectQuery,8  QueryClient,9} from '@tanstack/angular-query-experimental'10 11@Component({12  template: `13    <div>14      <button (click)="onAddTodo()">Add Todo</button>15 16      <ul>17        @for (todo of todosQuery.data(); track todo.title) {18          <li>{{ todo.title }}</li>19        }20      </ul>21    </div>22  `,23})24export class TodosComponent {25  readonly todoService = inject(TodoService)26  readonly queryClient = inject(QueryClient)27 28  readonly todosQuery = injectQuery(() => ({29    queryKey: ['todos'],30    queryFn: () => this.todoService.getTodos(),31  }))32 33  readonly addTodoMutation = injectMutation(() => ({34    mutationFn: (todo: Todo) => this.todoService.addTodo(todo),35    onSuccess: () => {36      this.queryClient.invalidateQueries({ queryKey: ['todos'] })37    },38  }))39 40  onAddTodo() {41    this.addTodoMutation.mutate({42      id: Date.now().toString(),43      title: 'Do Laundry',44    })45  }46}47 48@Injectable({ providedIn: 'root' })49export class TodoService {50  private readonly http = inject(HttpClient)51 52  getTodos(): Promise<Todo[]> {53    return lastValueFrom(54      this.http.get<Todo[]>('https://jsonplaceholder.typicode.com/todos'),55    )56  }57 58  addTodo(todo: Todo): Promise<Todo> {59    return lastValueFrom(60      this.http.post<Todo>('https://jsonplaceholder.typicode.com/todos', todo),61    )62  }63}64 65interface Todo {66  id: string67  title: string68}

本页为 TanStack Query 文档(Angular 版)的非官方中文翻译,原文由上游团队维护,遵循 MIT 许可。 译文如有偏差,以英文原文为准。

译自上游 59d11de