我有以下代码:
const HomeWithApollo = withApollo(compose(
graphql(HOME_QUERY, {
props({
data: { loading, page, fetchMore }
}) {
return {
loading,
page,
fetchLocations: () => {
return fetchMore({
query: ALL_LOCATIONS_QUERY,
updateQuery: (prev, {fetchMoreResult}) => {
if (!fetchMoreResult.data) { return prev; }
return {
data: [...prev, ...fetchMoreResult.data]
};
}
})
}
};
}
})
)(Home));
在迁移到 Apollo 之前,我将 ALL_LOCATIONS_QUERY 作为同构获取客户端(基本上是 AJAX 请求)加载。但我正在寻找阿波罗的方式,我不确定我是否有它。我有几个问题。
- 使用
graphql(QUERY_NAME, { options })
,因为我完全分开加载 Home 数据和 Locations 数据,它们是否应该放置在高阶组件中的单独的多个graphql
函数中?withApollo(compose([...here])
- 目前为了从
fetchMore
函数中获取数据,我正在执行以下操作,但有些事情告诉我它应该在状态内完成,所以 Apollo 知道它可以进行缓存。对此有什么想法吗?我是否朝着正确的方向前进?
async componentDidMount(){
const { data } = await this.props.fetchLocations();
this.setState({ locations: data.allLocations });
}
非常感谢您!