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

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 10 июня 2018 г.

08:35:28 ДП
User 386334134
а мы наворотили конечно
но прикрутили mobx к аполло
и такие ситуации с кешами легко решаются
без радикальных методов
08:43:58 ДП
User 202047214
@andiwillfly а вы как решаете? Я понял, что все еще хуже. Я загружаю отдельно списки тасков с разными фильтрами при кликах на табы и отдельно получаю их количество, чтобы сразу для всех фильтров отразить. То есть если мне руками обновлять кэш, то нужно пройтись по всем закешированным запросам с разными фильтрами и понять, должен ли отображаться этот таск в фильтре. + после этого обновить счетчики аналогично.
08:48:43 ДП
User 202047214
Мне кажется, что это может в итоге прийти к тому, что заного запрос будет сделать даже дешевле, чем руками обновлять
08:50:44 ДП
User 386334134
User 202047214
@andiwillfly а вы как решаете? Я понял, что все еще хуже. Я загружаю отдельно списки тасков с разными фильтрами при кликах на табы и отдельно получаю их количество, чтобы сразу для всех фильтров отразить. То есть если мне руками обновлять кэш, то нужно пройтись по всем закешированным запросам с разными фильтрами и понять, должен ли отображаться этот таск в фильтре. + после этого обновить счетчики аналогично.
у нас все сложно
но покк работает
если что в личку лучше пиши
09:04:52 ДП
User 224769697
почему в личку ?) тут многим интересно, кажется)
09:19:55 ДП
User 202047214
Я пока остановился на создании issue :) Надеюсь, что или выльется во что-то, или придут взрослые дядьки и скажут, как правильно использовать аполло
09:19:58 ДП
User 202047214
https://github.com/apollographql/apollo-client/issues/3564
github.com/apollographql/apollo-client/issues/3564
I've got stuck with a rather common situation with mutations and cache. In my case I have a query tasks(filters: $filters). It gets fetched and cached several times with different filters. Then I run a mutation createTask(input: $input)....
09:21:28 ДП
05:36:04 ПП
User 141958411
User 202047214
Я пока остановился на создании issue :) Надеюсь, что или выльется во что-то, или придут взрослые дядьки и скажут, как правильно использовать аполло
optimistic update, optimistic response посмотри по этим словам в доке аполло
05:37:59 ПП
User 202047214
А как оно поможет? Я с этого начал, но чтобы оптимистик апдейт сделать при добавлении сущности мне нужно руками проверить ее на принадлежность ко всем возможным фильтрам
07:09:24 ПП
User 141958411
User 202047214
А как оно поможет? Я с этого начал, но чтобы оптимистик апдейт сделать при добавлении сущности мне нужно руками проверить ее на принадлежность ко всем возможным фильтрам
так refetch возвращает добавленную сущность?
07:10:42 ПП
User 202047214
Да, у меня есть фильтр, например, за все дни, сегодня и неделю. Мне вернется сущность с датой и надо руками отфильтровать и добавить в нужные кеши. К этому чуть позже еще добавятся варианты отображения за любую дату, которые тоже будут кешироваться
07:11:24 ПП
User 141958411
я имею в виду, вот сделал мутацию, если принудительно сделать рефетч, то вернется список с этой мутацией или он все равно из кэша возвращает?
07:12:48 ПП
User 141958411
для списка сущностей можно хранить например время последней мутации и при переходе настраницу со списком этих сущностей проверять если время последней мутации больше чем то когда обновлялся список делать рефетч, хотя это костыль какой то
07:12:53 ПП
User 141958411
должно быть решение от аполло
07:26:35 ПП
User 202047214
Мне же нужно сделать рефетч только того списка на котором я сейчас нахожусь
07:27:02 ПП
User 202047214
А при переходе на другой фильтр снова из кэша возьмется, если только не делать network-only
07:27:59 ПП
User 202047214
+ надо при мутации еще как-то передавать текущий фильтр, хотя кроме как для рефетча это не нужно
07:28:05 ПП
User 141958411
ты же не знаешь попадает это сущновть в этот фильтр или нет, так что нужно делать запрос всегда после мутации для списка этого типа сущностей
07:28:31 ПП
User 202047214
Да, но согласись, что очень странно, что для создания сущности нужно еще передать активный фильтр, который у пользователя открыт
07:29:07 ПП
User 141958411
я видимо не понимаю, какая разница что за фильтр у него открыт, если в список добавлена сущность, значит на любом фильтре нужно обновлять
07:29:09 ПП
User 202047214
Именно поэтому мне кажется, что сброс кэша решил бы проблему
07:29:40 ПП
User 141958411
если список товаров, а у тебя на разных страницах разные отборы этих товаров
07:30:14 ПП
User 141958411
то на любом фильтре с товарами нужно обновлять после добавления товара
07:30:55 ПП
User 202047214
Ну смотри - обновить данные я могу 3мя способами: 
1. Руками обновить кэш, что значит пройтись по всем кэшам с разными фильтрами и где надо -обновить
2. Делать рефетч текущего активного фильтра, что значит передавать в вызов мутации данные не связанные с созданием сущности
3. Сбросить весь кэш связанный с этой сущностью
07:31:51 ПП
User 202047214
Есть вариант конечно еще сделать рефетч все закешированных вариантов фильтров, но это вероятность сделать хоть 100 запросов
07:32:26 ПП
User 141958411
User 202047214
Есть вариант конечно еще сделать рефетч все закешированных вариантов фильтров, но это вероятность сделать хоть 100 запросов
зачем делать все сразу?, просто при переходе на страницу делай рефетч
07:32:55 ПП
User 202047214
При переходе да, но при выполнении мутации я не ухожу на другую страницу, у меня список прям там же
07:33:11 ПП
User 141958411
User 202047214
При переходе да, но при выполнении мутации я не ухожу на другую страницу, у меня список прям там же
ну вот этот список и обновляй
07:33:17 ПП
User 141958411
рефетч без параметров вызывается
07:33:30 ПП
User 141958411
он вызовется с тем же набором параметров что и при формировании
07:33:55 ПП
User 141958411
в смысле ты вызываешь его без параметров, но он выполняет с тем наборов параметров с которым он вызвался первый раз
07:34:32 ПП
User 202047214
Да, я об этом и говорю, изначально когда я вызывал список - я передал туда значение фильтра. Значит при создании новой сущности мне нужно откуда-то еще каждый раз брать текущий активный список
07:34:51 ПП
User 202047214
А, я пропустил последнее сообщение. В первый раз?
07:34:51 ПП
User 141958411
User 202047214
Да, я об этом и говорю, изначально когда я вызывал список - я передал туда значение фильтра. Значит при создании новой сущности мне нужно откуда-то еще каждый раз брать текущий активный список
не нужно
07:36:10 ПП
User 202047214
Может я тогда упустил что-то в доке. Я видел только refetchQueries, которому передаешь массив query вместе с переменными
07:36:24 ПП
User 141958411
HOC grapghql передает тебе в пропс refetch так вот если вызвать refetch() без параметров
07:36:44 ПП
User 141958411
то выполнится последний запрос, с теми же переменными
07:39:40 ПП
User 202047214
Хм, я вижу refetch в data в props из ответа query. То есть после выполнения мутации у меня этого refetch не будет, только refetchQueries
07:41:35 ПП
User 141958411
почему после мутации может исчезнуть refetch?
07:42:00 ПП
User 141958411
refetch же к списку привзяан, а мутация у тебя к форме ввода скорее всего
07:42:16 ПП
User 141958411
да в любом случае refetch должен быть
07:42:26 ПП
User 202047214
Потому что я query делаю где-то в приложении. А потом в другом месте делаю мутацию и у меня там нет уже результатов выполнения query
07:43:08 ПП
User 141958411
User 202047214
Потому что я query делаю где-то в приложении. А потом в другом месте делаю мутацию и у меня там нет уже результатов выполнения query
т.е. ты не используешь
import { graphql } from 'react-apollo'
07:43:12 ПП
07:43:35 ПП
User 202047214
Использую
07:44:02 ПП
User 141958411
но форма с мутацией у тебя на другой странице?
07:44:25 ПП
User 202047214
Если я оберну компонент списка в graphql hoc с query списка, а попап с мутацией отдельно обернут, то там не будет data из query
07:44:53 ПП
User 141958411
так тебе не на попапе нужнжо рефетч сделать а на списке
07:45:07 ПП
User 141958411
ты кстати даже со списка в попап можешь передать рефетч
07:45:19 ПП
User 141958411
так будет изящнее
07:46:35 ПП
User 202047214
Но мне нужно будет узнать внутри списка в какой момент я засабмитил форму в попапе. Или из списка передавать refetch в родителей, чтобы передать в попап
07:46:49 ПП
User 202047214
И все это вместо того, чтобы просто иметь возможность сбросить нужный кэш)
07:47:22 ПП
User 141958411
User 202047214
Но мне нужно будет узнать внутри списка в какой момент я засабмитил форму в попапе. Или из списка передавать refetch в родителей, чтобы передать в попап
ну попап же ты открываешь каким то событием, вот в него и передавай рефетч
08:01:03 ПП
User 202047214
Я открываю его диспатчем и передаю туда пейлоад экшена редаксовского
08:02:07 ПП
User 202047214
Ну и даже если я я сделаю обертку вокруг диспатча дополнительную - это закончится тем, что я refetch положу в стор)
08:02:36 ПП
User 202047214
Вообще бы не назвал это изящным решением, когда оно решается сбросом кэша (что по сути refetch и делает)
08:27:55 ПП
User 141958411
User 202047214
Вообще бы не назвал это изящным решением, когда оно решается сбросом кэша (что по сути refetch и делает)
refetch просто делает повторный запрос, что может быть лучше в данном случае?
08:29:11 ПП
User 141958411
User 202047214
Ну и даже если я я сделаю обертку вокруг диспатча дополнительную - это закончится тем, что я refetch положу в стор)
если есть редакс, тогда можно сделать по другому, при мутации  делать дополнительно экшн с изменением какого то значения в строе, а список подписать на это значение и при изменении его делать рефетч
08:30:11 ПП
User 141958411
User 141958411
если есть редакс, тогда можно сделать по другому, при мутации  делать дополнительно экшн с изменением какого то значения в строе, а список подписать на это значение и при изменении его делать рефетч
в cDU
08:35:40 ПП
User 141958411
эта задача схожа с задачей про поле поиска, которое находится где то в навбаре и никак не связано со списком
при вводе в поле поиска нужно делать запрос на сервер с текстом поиска
09:04:54 ПП
User 202047214
При сбросе кэша тоже произойдет рефетч, только автоматический, без всяких передач через стор
09:08:48 ПП
User 141958411
User 202047214
При сбросе кэша тоже произойдет рефетч, только автоматический, без всяких передач через стор
выборочный сброс кэша еще не завезли вроде
09:09:02 ПП
User 141958411
а общий кэш сбрасывать плохое решение
09:21:55 ПП
User 202047214
Именно с этого разговор и начался, что я скинул ссылку на issue, который завел :)