由于 TanStack Query 的获取机制是基于 Promise 的,您可以使用任何异步数据获取客户端,包括浏览器原生的 fetch API、graphql-request 等等。
HttpClient 是 Angular 中一个强大且集成度高的部分,它提供了以下优势:
由于 TanStack Query 是一个基于 Promise 的库,来自 HttpClient 的 Observables 需要转换为 Promises。这可以通过 rxjs 中的 lastValueFrom 或 firstValueFrom 函数来实现。
@Component({
// ...
})
class ExampleComponent {
private readonly http = inject(HttpClient)
readonly query = injectQuery(() => ({
queryKey: ['repoData'],
queryFn: () =>
lastValueFrom(
this.http.get('https://api.github.com/repos/tanstack/query'),
),
}))
}
@Component({
// ...
})
class ExampleComponent {
private readonly http = inject(HttpClient)
readonly query = injectQuery(() => ({
queryKey: ['repoData'],
queryFn: () =>
lastValueFrom(
this.http.get('https://api.github.com/repos/tanstack/query'),
),
}))
}
随着 Angular 向 RxJS 作为可选依赖项发展,预计 HttpClient 未来也将支持 Promises。
TanStack Query for Angular 支持 Observables 的计划正在进行中。
数据获取客户端 | 优点 | 缺点 |
---|---|---|
Angular HttpClient | 功能强大,与 Angular 集成度高。 | Observables 需要转换为 Promises。 |
Fetch | 浏览器原生 API,不会增加包体积。 | API 基础,缺乏许多功能。 |
专用库,例如 graphql-request | 针对特定用例的专用功能。 | 如果它不是 Angular 库,它将无法很好地与框架集成。 |