Size: a a a

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

2020 October 07

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
всем привет, сталкнулся с проблемой, довольно жесткой, есть к примеру список с подгрузкой, он может быть огромным, в компоненте стоит fetchPolicy: 'network-only',

у списка есть селект, который выполняет мутацию, все работало ровно до того момента, как убрали 'network-only', потому что кеш квери то никто не обновляет, как обновить кеш этой квери именно с тем запросом, который был сделан последний раз
источник

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
refetchQueries: ['query'],


поможет, если не было догрузок, апдейт руками делать скорее всего не вариант, там миллион полей и вложенностей
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
А вы в fetchMore делаете updateQuery?
источник

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
а я увидел, там очко полнейшее, короче что бы получить список - один запрос, догрузка - другой запрос, елементы списка - третий запрос, в итоге вся информация в трех запросах, я пока вообще без понятия, как обновитькеш
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Ну тогда самое время рефакторить и читать документацию, в advanced topics по полочкам расписано с обновлением кеша при fetchMore
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
источник

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
Олег Линьков
Ну тогда самое время рефакторить и читать документацию, в advanced topics по полочкам расписано с обновлением кеша при fetchMore
там слишком много, времени не дадут столько, я прям хз, почему так изначально делали
источник

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
тоесть есть дерево, у него таблицы, у таблицы елементы, у елемента фильтры, вот начальная структура - один запрос, подгрузка елементов - второй, подгрузка таблиц - третий
источник

А

Артём in GraphQL — русскоговорящее сообщество
Коллеги добрый день! У меня есть асинхронная мутация на обновление неких данных. После обновления, мне эти данные надо заново получить. Лучше использовать Subscription, который пришлет обновленные данные или использовать пулинг с помощью query?
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Артём
Коллеги добрый день! У меня есть асинхронная мутация на обновление неких данных. После обновления, мне эти данные надо заново получить. Лучше использовать Subscription, который пришлет обновленные данные или использовать пулинг с помощью query?
Вот буквально на днях разбирал фронт с такой же логикой, как же хотелось руки отрубить, причем себе. После мутации обновляйте кеш самостоятельно через writeQuery, не плодите лишние запросы, если у вас есть все данные..
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Bogdan Aleksandrovich
там слишком много, времени не дадут столько, я прям хз, почему так изначально делали
Ну я тут не подскажу, код не вижу, ну и за вас рефакторить желания нет. Серебряной пули тут нет
источник

BA

Bogdan Aleksandrovic... in GraphQL — русскоговорящее сообщество
так а вообще, если данные идут из 3 разных запросов, обновить разом все три запроса нормальный выход?
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Bogdan Aleksandrovich
так а вообще, если данные идут из 3 разных запросов, обновить разом все три запроса нормальный выход?
нет конечно)
источник

А

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

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Артём
кэшем будет рулить backend, и данные меняются им же со своей логикой
Вы посылаете данные на бек, почему бы не обновить данные на клиенте, вместо доп получения данных?
источник

А

Артём in GraphQL — русскоговорящее сообщество
Олег Линьков
Вы посылаете данные на бек, почему бы не обновить данные на клиенте, вместо доп получения данных?
потому что логику изменения данных диктует бек
источник

ОЛ

Олег Линьков... in GraphQL — русскоговорящее сообщество
Артём
потому что логику изменения данных диктует бек
Не буду спорить, но логику данных диктует схема и на клиенте она в актуальном виде. Хотите лишние данные по сети катать, вместо использования логики - ваше дело :) Тогда вам polling очень подойдет
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
При правильном дизайне GraphQL-схемы у любой мутации должен быть ответ:

mutation {
 updateBook(title: "Introduction to GraphQL", pages: 150, chapters: 12, authors: ["Peter Mbanugo", "Peter Smith"]) {
   title
   pages
   authors {
     name
   }
 }
}

То есть, после выполнения мутации, сразу же происходит запрос обновлённых данных. Эти данные должны проапдейтить кэш.
источник

АР

Алексей Родионов... in GraphQL — русскоговорящее сообщество
type Mutation {
 updateBook(title: String!, authors: [String!]!, pages: Int): Book!
}
источник

А

Артём in GraphQL — русскоговорящее сообщество
понял, спасибо!
источник