由于 TanStack Query 的请求机制基于 Promise 无感知构建,您实际上可以使用任何异步数据请求客户端,包括浏览器原生的 fetch API、graphql-request 等。
HttpClient 是 Angular 强大且深度集成的组成部分,具有以下优势:
由于 TanStack Query 是基于 Promise 的库,需将 HttpClient 的 Observable 转换为 Promise。可通过 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 未来也将支持 Promise。
TanStack Query for Angular 的 Observable 支持已在规划中。
数据请求客户端 | 优势 | 局限性 |
---|---|---|
Angular HttpClient | 功能丰富且与 Angular 深度集成。 | 需将 Observable 转换为 Promise。 |
Fetch | 浏览器原生 API,不增加包体积。 | 功能基础,缺乏高级特性。 |
专用库如 graphql-request | 针对特定场景的专用功能。 | 若非 Angular 专用库则框架集成度较差。 |