【问题标题】:How to disable query execution on componentWillReceiveProps lifecycle with react-apollo?如何使用 react-apollo 在 componentWillReceiveProps 生命周期上禁用查询执行?
【发布时间】: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 添加了评论,我希望它能进一步解释我的想法

标签: reactjs graphql apollo


【解决方案1】:

借助 Apollo 1.0 RC,您可以使用 FetchPolicy。

【讨论】:

    猜你喜欢
    • 2018-02-17
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-09
    相关资源
    最近更新 更多