我有一个Angular 应用程序,它在第一页显示文章。我不希望API调用被执行两次,第一次在服务器端,第二次在客户端,所以我使用传输状态来检查api是否已经被调用。如果我使用REST API,一切都工作正常,api调用只在服务器上执行,但当我用apollo添加graphql时,这似乎不起作用。
async ngOnInit() {
let myTransferStateKey = makeStateKey<any>('myDatas');
if (this.transferState.hasKey(myTransferStateKey)) {
console.log('HomeComponent ngOnInit hasKey');
this.transferState.get(myTransferStateKey, [])
this.transferState.remove(myTransferStateKey);
} else {
console.log('HomeComponent ngOnInit noKey');
this.posts = (await this.graphql.query(this.home_query)) as {
capital: string
currency: string
languages: []
name: string
native: string
}[]
this.transferState.set(myTransferStateKey, this.posts)
}
}
1条答案
按热度按时间ig9co6j11#
如果您使用Apollo,请考虑使用他们的docs中使用的方法。请记住在配置中添加ssrMode和ssrForceFetchDelay以使其正常工作。正确设置API服务器URL也很重要,正如他们在最佳实践中提到的那样。示例: