由于 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 库,则无法与框架很好地集成。 |