본문으로 건너뛰기

빠른 시작

중요: 이 라이브러리는 현재 실험 단계입니다. 이는 마이너 및 패치 릴리스에서 호환성을 깨는 변경 사항이 발생한다는 의미입니다. 신중하게 업그레이드하십시오. 실험 단계에서 이를 프로덕션에 사용한다면 예기치 않은 호환성 변경을 방지하도록 버전을 패치 수준 버전으로 고정하십시오.

완전히 작동하는 예제를 찾고 있다면 기본 CodeSandbox 예제를 살펴보세요

App에 클라이언트 제공하기

import { provideHttpClient } from '@angular/common/http'
import {
provideTanStackQuery,
QueryClient,
} from '@tanstack/angular-query-experimental'

bootstrapApplication(AppComponent, {
providers: [provideHttpClient(), provideTanStackQuery(new QueryClient())],
})

또는 NgModule 기반 앱에서

import { provideHttpClient } from '@angular/common/http'
import {
provideTanStackQuery,
QueryClient,
} from '@tanstack/angular-query-experimental'

@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [provideTanStackQuery(new QueryClient())],
bootstrap: [AppComponent],
})
export class AppModule {}

쿼리와 뮤테이션이 있는 컴포넌트

import { Component, Injectable, inject } from '@angular/core'
import { HttpClient } from '@angular/common/http'
import { lastValueFrom } from 'rxjs'

import {
injectMutation,
injectQuery,
QueryClient,
} from '@tanstack/angular-query-experimental'

@Component({
template: `
<div>
<button (click)="onAddTodo()">Add Todo</button>

<ul>
@for (todo of query.data(); track todo.title) {
<li>{{ todo.title }}</li>
}
</ul>
</div>
`,
})
export class TodosComponent {
todoService = inject(TodoService)
queryClient = inject(QueryClient)

query = injectQuery(() => ({
queryKey: ['todos'],
queryFn: () => this.todoService.getTodos(),
}))

mutation = injectMutation(() => ({
mutationFn: (todo: Todo) => this.todoService.addTodo(todo),
onSuccess: () => {
this.queryClient.invalidateQueries({ queryKey: ['todos'] })
},
}))

onAddTodo() {
this.mutation.mutate({
id: Date.now().toString(),
title: 'Do Laundry',
})
}
}

@Injectable({ providedIn: 'root' })
export class TodoService {
private http = inject(HttpClient)

getTodos(): Promise<Todo[]> {
return lastValueFrom(
this.http.get<Todo[]>('https://jsonplaceholder.typicode.com/todos'),
)
}

addTodo(todo: Todo): Promise<Todo> {
return lastValueFrom(
this.http.post<Todo>('https://jsonplaceholder.typicode.com/todos', todo),
)
}
}

interface Todo {
id: string
title: string
}