由于 TanStack Query 的获取机制是基于 Promise 构建的,因此您可以使用任何异步数据获取客户端,包括浏览器原生 fetch API、 graphql-request 等。
HttpClient 是 Angular 的强大且集成的部分,它具有以下优点
由于 TanStack Query 是一个基于 Promise 的库,因此来自 HttpClient 的 Observables 需要转换为 Promise。这可以使用 lastValueFrom 或 firstValueFrom 函数从 rxjs 完成。
@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 未来也将支持 Promise。
计划在 TanStack Query for Angular 中支持 Observables。
数据获取客户端 | 优点 | 缺点 |
---|---|---|
Angular HttpClient | 功能丰富,与 Angular 集成良好。 | Observables 需要转换为 Promises。 |
Fetch | 浏览器原生 API,因此不会增加捆绑包大小。 | 功能简陋的 API,缺少许多功能。 |
专用库,例如 graphql-request | 针对特定用例的专用功能。 | 如果它不是 Angular 库,则无法与框架良好集成。 |