0

Graphene-Django Relay 仕様を使用して動的データを取得しています。

import graphene
from graphene_django.types import DjangoObjectType
from graphene_django.fields import DjangoConnectionField

from . import models


class PostType(DjangoObjectType):
    class Meta:
        model = models.Post
        interfaces = (graphene.Node, )

class Query(graphene.ObjectType):
    post = graphene.Field(PostType)
    posts = DjangoConnectionField(PostType)

def resolve_posts(self, info, **kwargs):
    return models.Post.objects.order_by('-score', '-id')

カーソルとデータを取得した後に新しい投稿を追加すると、カーソルが変化します。つまり、データの正確なオフセットを指していたカーソルは、もはやそのデータを指していません。これは、新しい別のデータを指しています。これにより、次を使用してカーソルベースのページネーションを実装できません。

query fetchPosts ($cursor) {
    posts(first: 20, after: $cursor)...
}

データが変化するとカーソルが変化するため、従来のオフセットベースのページネーションと同じです。足りないものはありますか?カーソルに必要なのは、変更しないことです。この記事のように:

https://www.sitepoint.com/paginating-real-time-data-cursor-based-pagination/

カーソルが動的に変化する同じデータを指すようにするにはどうすればよいですか?

4

1 に答える 1

2

残念ながら、この動作は想定されていると思います。Relay の戦略は、従来のオフセット ページネーションよりも柔軟ですが、同じ制限があります。

基になるデータが変更された場合、それを表すページ付けも変更する必要があります。

これを回避したい場合は、基礎となるデータを別の方法でソートして、新しいレコードによってページ付けが変更されないようにすることを検討できます。たとえば、投稿を作成時間で並べ替えると、新しい投稿がリストの最後に追加され、以前のページネーションはすべて有効になります。

于 2020-06-20T21:47:13.620 に答える