【发布时间】:2017-02-28 07:24:32
【问题描述】:
当使用 react-apollo HOC graphql 时,是否可以以某种方式禁用 componentWillReceiveProps 中的查询执行?为了说明我正在尝试做的事情。
我有路由/:albumSlug/photos/:photoId,它将根据url打开相册中的照片详细信息页面。此页面还将使用 photoId 获取此照片前后的 10 张照片。现在当用户导航到下一张照片时,我会检查是否有超过 5 张照片预加载,如果是,我将跳过此查询,如果现在我将对照片执行 fetchMore 查询并将数据合并在一起。
问题是,如果我使用 graphql HOC,它将为每个 componentWillReceiveProps 触发单个查询。是否有可能以某种方式禁用它?还是其他解决方案?
我提出的唯一解决方案是将使用 graphql 返回的组件包装为简单组件,该组件将处理此跳过状态并在查询选项中使用skip 选项,但不知何故我真的不喜欢这种解决方案。
更新: 好吧,这只是想法,但查询看起来像这样:
album(id: $albumId) {
current:photoById(id: $photoId) {
...photo
}
previous: photos(before: $photoId, limit: 10) {
...photo
}
next: photos(after: $photoId, limit: 10) {
...photo
}
}
然后我使用这样的道具映射:
photos: [...album.previous, album.current, ...album.next]
将其转换为我可以在其中找到照片的数组。我也用它来渲染导航,我的想法是使用fetchMore 函数并将其合并到此页面。不知道能不能用,我在试验一下。
【问题讨论】:
-
您可以使用
noFetch选项来确保数据仅从缓存中加载,而不会命中服务器。我不确定你打算如何确定是否应该加载查询,你能提供更多细节吗? -
@stubailo 添加了评论,我希望它能进一步解释我的想法