Apollo 3 分页与开始和限制更多以及字段策略

Posted

技术标签:

【中文标题】Apollo 3 分页与开始和限制更多以及字段策略【英文标题】:Apollo 3 pagination with start and limit more and Field Policies 【发布时间】:2021-02-16 03:17:43 【问题描述】:

我正在使用这样的 fetchmMore Apollo 函数:

  const 
    data: data_next_drops,
    loading: loading_next_drops,
    error: error_next_drops,
    fetchMore: fetchMoreNext,
    refetch: refetchNext
   = useQuery(GET_ALL_NEXT_DROPS, 
    variables:  
      date: date,      
      limit: limit,
      start: starte
    ,
  );

  const loadMore = async () => 
    setLoading(true)
    fetchMoreNext(
      variables: 
        date: date,      
        limit: 10,
        start: Skip
      ,
      updateQuery: (preveResult, fetchMoreResult) => 
        setSkip(Skip+limit)
        fetchMoreResult.drops = [
          ...preveResult.drops,
          ...fetchMoreResult.drops
        ]
        setLoading(false)
        return fetchMoreResult;
      
    )  
  

但我有这个警告:

    The updateQuery callback for fetchMore is deprecated, and will be removed
in the next major version of Apollo Client.

Please convert updateQuery functions to field policies with appropriate
read and merge functions, or use/adapt a helper function (such as
concatPagination, offsetLimitPagination, or relayStylePagination) from
@apollo/client/utilities.

The field policy system handles pagination more effectively than a
hand-written updateQuery function, and you only need to define the policy
once, rather than every time you call fetchMore.

如您所见,我使用 limit 和 start 进行分页,所以我认为我不能使用 offsetLimitPagination 或 relayStylePagination,所以这可以使用 concatPagination 吗?还是有其他方法?

提前谢谢你!

【问题讨论】:

【参考方案1】:

警告只是告诉你将updateQuery函数移出InMemoryCache

请参阅pagination documentation(完整阅读,我第一次错过了一些重要信息),或者因为我有一个不相关的问题使我产生了这个sandbox,并提供了一个非常接近你的工作示例。

【讨论】:

以上是关于Apollo 3 分页与开始和限制更多以及字段策略的主要内容,如果未能解决你的问题,请参考以下文章

ES实战ES分页与去重

ES实战ES分页与去重

如何使用 start 和 limit 进行分页

mysql之分页与慢日志以及表知识补充

ES深度分页与批量操作

bootstrap分页与翻页