Size: a a a

GraphQL — русскоговорящее сообщество

2021 August 27

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Но сообщения должны быть нормально
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Всем привет!

Что-то я немного запутался, читая документацию на Apollo.

В чём отличие fetchMore от subscribeToMore? И работает ли fetchMore с subscription, а не только с query?

Я использую Hasura, есть subscription, который запрашивает список элементов. Хочу реализовать пагинацию в виде infinite scroll. Пиганация курсорная, не оффсетная:

subscription {
 products(limit: 10, where: {id: {_gt: 40}}) {
   id
   name
 }
}


С помощью чего запрашивать следующие пачки? С помощью fetchMore или subscribeToMore?
источник

y

yel' in GraphQL — русскоговорящее сообщество
subscription для подписок, fetchMore для обычных квери
источник

y

yel' in GraphQL — русскоговорящее сообщество
если у вас нет вебсокета, то subscription не нужен обычно
источник

НЛ

Нежный Лосось... in GraphQL — русскоговорящее сообщество
А почему у вас запрос списка реализован как subscription, а не query?

Вообще fetchMore для подгрузки следующей пачки при пагинации query, subscribeToMore - для подписки на subscription.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Потому что Hasura так позволяет. Если в Hasura просто заменить в запросе слово query на subscription, то прилетит тот же список, но живой (при изменении одного из элементов, он сразу же изменится на экране).
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Мне как раз и нужно, чтобы когда пользователь впервые откроет приложение, то у него уже был реалтайм.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Это уже работает. Вопрос как теперь пагинацию к этому subscription добавить. Через fetchMore?

fetchMore работает с subscription?
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
источник

НЛ

Нежный Лосось... in GraphQL — русскоговорящее сообщество
fetchMore только для query.
С хасурой не работал, не знаю как там все устроено ) Вообще infinite scroll список через live query subscription звучит странно. Как я понял, сабскрипшн при изменении одного из продуктов в запрошеном списке присылает полный список по этой подписке? 🤔
источник

НЛ

Нежный Лосось... in GraphQL — русскоговорящее сообщество
если бы пагинация была постраничная, то с этим бы можно было жить. А так получается, на изменение 1 элемента в infinite списке гоняется весь infinite список по сети
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
В том-то и дело, что не весь инфинит список, а выделенный кусок (страница).
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Я использую курсорную пагинацию, а не оффсетную. Разница лишь в том, что пачку из 25 элементов запрашиваю не с порядкового номера элемента (оффсета), а курсора (id элемента). Это спасает от того, что в начало списка вставится новый элемент и пагинация съедет.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Разницы между классической (постраничной) и infinite-пагинацией нет.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Кроме как в UI.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
И там, и там есть место откуда нужно начать и сколько элементов взять.

Просто в infinite scroll я доклеиваю в конец новые пачки.
источник

НЛ

Нежный Лосось... in GraphQL — русскоговорящее сообщество
Я именно про разницу на фронтенде писал.
С постраничной пагинацией на фронте достаточно быть подписанным на изменения текущей страницы (пачки из 25 элементов).
С инфинит скроллом - с прокруткой список доклеивается и растёт "до бесконечности". Получается и подписка уже должна при изменении гонять весь проскроленный список, а не пачку из 25 элементов
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Это да.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
Мне как раз так и надо.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
В идеале, нужен ещё двусторонний инфинит-скролл, который запоминает текущую позицию, если пользователь сошёл со страницы и потом снова вернулся.
источник