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

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

352 members

Архив канала @graphql_ru 2 сентября 2017 г.

08:42:25 ДП
User 47987125
Привет народ! Кто юзал GraphQL в качестве REST архитектуры? Интересует работа на фронте, я привык данные нормализовывать и хранить их в нормализованном состоянии ну и собирать селекторами. Нормальная ли практика юзать GraphQL и нормализовывать данные? Ну тоесть не подключать этих аполовских врапперов? Или с этим могут быть проблемы?
09:25:32 ДП
User 249356274
User 47987125
Привет народ! Кто юзал GraphQL в качестве REST архитектуры? Интересует работа на фронте, я привык данные нормализовывать и хранить их в нормализованном состоянии ну и собирать селекторами. Нормальная ли практика юзать GraphQL и нормализовывать данные? Ну тоесть не подключать этих аполовских врапперов? Или с этим могут быть проблемы?
На мой взгляд, если не юзать apollo, то нормализовать нужно. Но у аполло например фишка в том, что кэширование очень удобное и не нужно писать свой механизм. Я глубоко не копал, но с чем столкнулся - понравилось. Ну а проблемы могут в любом случае возникнуть.
10:58:19 ДП
User 35318732
аполло же сам как раз нормализует все данные, в том и фишка, что не надо вот это вот все самому делать, как в случае с редаксом, а если использовать graphql только как транспорт – на мой взгляд весь профит теряется
11:46:45 ДП
User 47987125
Да, это уже прочел, спасибо:)
11:48:43 ДП
User 47987125
А как делать если в одном контейнере скачал данные но помимо этого контейнера скаченные данные используются еще в других на той же странице.
Или сувать туда теже запросы а аполо поймет что данные уже есть и не будет их качать?
11:50:39 ДП
User 47987125
И что делать в случае если мне надо отобразить данные в другом формате, например сделать хитрую группировку, причем маппинг группировки ресурсоемкий, смогу ли я без проблем юзать селекторы мемойзные, например reselect?
11:52:07 ДП
User 47987125
или этот маппинг делать через graphql? хотелось бы иметь всю мощь JS все таки. И аполо сам решит хватает ли ему данных для отображения или надо запросить, также сделает умный кэш?
11:52:13 ДП
User 47987125
Чето вот сложно мне:)
11:54:24 ДП
User 141958411
User 47987125
А как делать если в одном контейнере скачал данные но помимо этого контейнера скаченные данные используются еще в других на той же странице.
Или сувать туда теже запросы а аполо поймет что данные уже есть и не будет их качать?
apollo данные кэширует, и в зависимости от параметра с которым он подключается к компоненту можно брать из кэша данные или повторно запрашивать с сервера
11:55:21 ДП
User 47987125
Понятно, спасибо.
11:56:32 ДП
User 47987125
А как все таки быть с маппингом данных в другом формате, например какие нибудь отчеты с калькуляцией, тут мне ничто не помешает юзануть редьюсер аполо и дернуть нормализованные данные для калькуляции и кэширования через мемойзные селекторы?
12:00:54 ПП
User 141958411
User 47987125
А как все таки быть с маппингом данных в другом формате, например какие нибудь отчеты с калькуляцией, тут мне ничто не помешает юзануть редьюсер аполо и дернуть нормализованные данные для калькуляции и кэширования через мемойзные селекторы?
редюсер аполло не принято дергать. с аполло обычно работают через запросы graphql
12:01:37 ПП
User 47987125
это уже не айс:(
12:01:39 ПП
User 141958411
User 47987125
А как все таки быть с маппингом данных в другом формате, например какие нибудь отчеты с калькуляцией, тут мне ничто не помешает юзануть редьюсер аполо и дернуть нормализованные данные для калькуляции и кэширования через мемойзные селекторы?
в чем проблема вытащить данные запросом graphql и дальше их обработать  в нужные формат?
12:02:28 ПП
User 47987125
Проблемы в том виде как ты написал нет. Но что если после выдергивания данных идет сложная калькуляция, затратная по ресурсом и я хочу чтоб она была как можно реже
12:02:40 ПП
User 47987125
только в случае изменения затронутых в калькуляции данных
12:02:44 ПП
User 47987125
селектор хочу мемойзный
12:02:51 ПП
User 141958411
User 47987125
Проблемы в том виде как ты написал нет. Но что если после выдергивания данных идет сложная калькуляция, затратная по ресурсом и я хочу чтоб она была как можно реже
ну подключить ридакс и хранить там обработанные данные
12:03:39 ПП
User 47987125
а как понять, что аполо изменил данные используемые в калькуляции
12:03:43 ПП
User 47987125
чтоб кэш обнулить
12:03:49 ПП
User 141958411
правда тут действительно проблема
12:04:09 ПП
User 47987125
Я просто не докапываюсь, реально есть такие кейсы в приложении:(
12:04:45 ПП
User 47987125
Может есть какие способы, что то просто не догоняем:)
12:05:56 ПП
User 47987125
или если я сделаю эту калькуляцию во враппере аполовском он ее выход(mapStateToProps) запомнит?
12:06:09 ПП
User 47987125
И просто в след раз не запустит пока данные используемые в запросе не поменяются?
12:06:20 ПП
User 47987125
Просто уж больно он умный, понять бы предел:)
12:06:56 ПП
User 47987125
Заранее говорю, graphQL не юзал ни разу, может что то не понимаю:(
12:07:28 ПП
User 141958411
User 47987125
или если я сделаю эту калькуляцию во враппере аполовском он ее выход(mapStateToProps) запомнит?
он всегда выполняет mapStateToProps когда рендерит компонент
12:07:43 ПП
User 141958411
т.е. даже когда данные из кэша берет будет выполнять mapStateToProps
12:08:29 ПП
User 47987125
тоесть mapStateToProps там будет дергаться на любое изменение в редьюсере аполо?
12:08:34 ПП
User 141958411
т.е. если например переходишь по роутам вперед назад, то он выполнит mapStateToProps даже если не обращался к серверу
12:09:09 ПП
User 47987125
а если какой то компонент делает запрос, получается редьюсер аполовский изменится, и все аполовские mapStateToProps дернутся?
12:09:26 ПП
User 141958411
User 47987125
тоесть mapStateToProps там будет дергаться на любое изменение в редьюсере аполо?
нет, только когда рендерится компоненти или вызывается refetch или fetchmore
12:10:21 ПП
User 47987125
чето еще сложнее стало, что же делать если отображаемые данные были изменены другим место программы
12:10:26 ПП
User 47987125
другим компонентом например
12:10:27 ПП
User 141958411
короче, так же как redux он себя ведет
12:10:36 ПП
User 47987125
получается на любое изменение редьюсера
12:10:55 ПП
User 141958411
User 47987125
получается на любое изменение редьюсера
редюсера связанного с этим компонентом
12:11:20 ПП
User 47987125
Сомневаюсь в этом утверждении
12:11:29 ПП
User 47987125
у него же один редьюсер
12:11:31 ПП
User 47987125
аполовский
12:11:38 ПП
User 141958411
т.е. на странице может быть навбар со своим графкюль запросом и список со своим, когда обновляется навбар список не будет обновляться если данные не свзяанны
12:12:48 ПП
User 47987125
обновляться может и не будет, рендер срабатывать не будет
12:12:53 ПП
User 141958411
User 47987125
у него же один редьюсер
сам mapStateToProps будет вызываться, но не проблема отфильтровать, нужно ли делать тяжелую операцию или нет
12:12:53 ПП
User 47987125
но mapStateToProps то дернется
12:13:06 ПП
User 47987125
просто выход из mapStateToProps не изменится потому и не будет рендера
12:13:53 ПП
User 47987125
А почему не проблема, как понять что данные которые ты использовал в mapStateToProps изменились
12:14:10 ПП
User 47987125
чтоб не возвращать результат из кэша
12:15:27 ПП
User 141958411
сейчас я попробую проверить
12:16:18 ПП
User 47987125
Было бы супер
12:16:24 ПП
User 47987125
Спасибо
12:19:20 ПП
User 47987125
По идее мне ничто не помешает юзать мемойзные селекторы, тот же reselect
12:19:29 ПП
User 47987125
Данные же не мьютятся
12:19:51 ПП
User 47987125
Или он там их вообще всегда новые будет возвращать
12:22:40 ПП
User 141958411
не уверен не мьютятся
12:23:17 ПП
User 47987125
Похоже надо тестануть
12:27:04 ПП
User 47987125
Просто с нормализованным редьюсером нет таких вопросов
12:27:18 ПП
User 47987125
Там все ясно когда что то меняется
12:41:09 ПП
User 141958411
User 47987125
А почему не проблема, как понять что данные которые ты использовал в mapStateToProps изменились
если данные не изменились то не вызывается, я проверил
01:43:17 ПП
User 47987125
Круто
01:43:50 ПП
User 141958411
User 47987125
Круто
но при моунте компонента вызывается
01:44:02 ПП
User 141958411
ну по другому и быть не может
01:44:19 ПП
User 47987125
При маунте то понятно:)