Size: a a a

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

2019 November 30

AS

Alexander Shamshurin in GraphQL — русскоговорящее сообщество
Artyom
добрый вечер! использую хук useQuery, но при серверном рендере он не собирает данные, а срабатывает loading
А что тут не так? Звучит как норм, если конечно флаг ssr не заставляет ждать разрешения промиса.
источник

AS

Alexander Shamshurin in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
Я в этом году делал три доклада, могу сформулировать все известные мне подводные камни, проверим то или не то 🙂

1. N + 1 сложнее обнаружить и обработать потому, что нам (в отличие от REST) нужно понять динамически, какие данные загружать из БД
2. Кэширование в целом и HTTP кэш в частности делать сложно и руками
3. Нет рекурсивных запросов и оператора "выбрать все" (`query { user { * } }`)
4. В некоторых случаях подход "атомарных мутаций" превращается в "четыре мутации одно и то же поле одинаково обновляют"
5. Появляются новая уязвимость "сложный/глубокий запрос"
6. Есть шанс спроектировать схему "как REST", и потом понять, что старые проблемы не решились, а новые прибавились 🙂
+, плюс на клиенте еще крайне скромный локал стейт.
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Alexander Shamshurin
+, плюс на клиенте еще крайне скромный локал стейт.
Скромный в каком плане?
источник

AS

Alexander Shamshurin in GraphQL — русскоговорящее сообщество
Dmitry Tsepelev
Скромный в каком плане?
В плане того, что управление локальным состоянием аполло пока еще слабое, многословное и недекларативное. Поэтому и колзозят туда redux и проч.
источник

DT

Dmitry Tsepelev in GraphQL — русскоговорящее сообщество
Это уже проблема конкретной реализации 🙂коллега тут недавно делился опытом эксплуатации gql без Apollo и relay https://m.youtube.com/watch?v=Pb8ExrULs10
источник

AS

Alexander Shamshurin in GraphQL — русскоговорящее сообщество
Общий плюс технологии несомненен, особенно благодаря типизации и привязки компонента к данным декларативно.
источник

BS

Bogdan Shelomanov in GraphQL — русскоговорящее сообщество
Alexander Shamshurin
Дичь это весь redux и тем более смешивать его с аполло. Иногда нужен второй стейт, но никак не redux.
Хз, к чему ты это мне пишешь
источник

АН

Анатолий Нечай-Гумен in GraphQL — русскоговорящее сообщество
central hardware
Есть кто использует graphql  на джава? Как оно?
Мы в котлине используем, написали свои обертки над graphql-java и вполне неплохо работается.
источник

ДР

Димка Реактнативный 🛸 in GraphQL — русскоговорящее сообщество
Чтобы не шуметь в эфире этого канала, сделал чат по теме AWS Amplify. Кому интересно welcome

@awsamplify
@awsamplify
источник

ДС

Дмитрий Середа in GraphQL — русскоговорящее сообщество
Дмитрий Середа
Есть предположение, что в коде на клиенте не учтены жизненные циклы приложения, в частности subscribeToMore не затолкнут в
componentDidMount() {
  this.props.subscribeToUpdates();
}

буду искать информацию как все это реализовать с учетом hooks
Решил отписать, что нашел решение, хоть и не совсем понимаю как оно работает, конструкция, что решает проблему выглядит следующим образом:
useEffect(() => {
  const unsubscribe =
    subscribeToMore { document: TASK_UPDATED };
  return () => unsubscribe();
}, [subscribeToMore]);
источник

BS

Bogdan Shelomanov in GraphQL — русскоговорящее сообщество
Дмитрий Середа
Решил отписать, что нашел решение, хоть и не совсем понимаю как оно работает, конструкция, что решает проблему выглядит следующим образом:
useEffect(() => {
  const unsubscribe =
    subscribeToMore { document: TASK_UPDATED };
  return () => unsubscribe();
}, [subscribeToMore]);
А ты напиши это не в функциональном компоненте, если не понял что тут
источник

ДС

Дмитрий Середа in GraphQL — русскоговорящее сообщество
Bogdan Shelomanov
А ты напиши это не в функциональном компоненте, если не понял что тут
У меня есть такой вариант, более того, даже с применением compose на уровне props ( вариант для 1-й версии apollo ) и без хуков на новых конструкциях его не написать :)
Собственно вся сложность сейчас заключается в том. что после UseEffect указан [subscribeToMore]
useEffect(() => {
}, [subscribeToMore]);

в случае componentDidMount / componentWillUnmount такого не было.
источник

BS

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

BS

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

PP

Pavel Perevezentsev in GraphQL — русскоговорящее сообщество
Всем привет.  Использую apollo возник вопрос, можно ли после того как выполняется запрос возвращать не только те данные которые были в последнем респонсе, а вообще все запрошенные ранее данные?
источник

PP

Pavel Perevezentsev in GraphQL — русскоговорящее сообщество
const OrganizationsList = ({ data: { searchInputValue } }) => {
 const classes = useStyles();
 const { loading, data: { organizations = [] } = {} } = useQuery(
   gql`
     query($params: OrganizationsQueryParams) {
       organizations(params: $params) {
         id
         name
       }
     }
   `,
   {
     variables: {
       params: {
         search: searchInputValue,
       },
     },
   },
 );

 return (
   <List>
     {matchSorter(organizations, searchInputValue).map(organization => (
       <ListItem>{organization.id}</ListItem>
     ))}
   </List>
 );
};
источник
2019 December 01

C

Combot in GraphQL — русскоговорящее сообщество
А has been banned! Reason: CAS ban.
источник

BS

Bogdan Shelomanov in GraphQL — русскоговорящее сообщество
Pavel Perevezentsev
const OrganizationsList = ({ data: { searchInputValue } }) => {
 const classes = useStyles();
 const { loading, data: { organizations = [] } = {} } = useQuery(
   gql`
     query($params: OrganizationsQueryParams) {
       organizations(params: $params) {
         id
         name
       }
     }
   `,
   {
     variables: {
       params: {
         search: searchInputValue,
       },
     },
   },
 );

 return (
   <List>
     {matchSorter(organizations, searchInputValue).map(organization => (
       <ListItem>{organization.id}</ListItem>
     ))}
   </List>
 );
};
В резолвере верни, если бек не твой, попроси, что бы сделали
источник

PP

Pavel Perevezentsev in GraphQL — русскоговорящее сообщество
Bogdan Shelomanov
В резолвере верни, если бек не твой, попроси, что бы сделали
тоесть на клиенте это никак нельзя разрешить?
источник

BS

Bogdan Shelomanov in GraphQL — русскоговорящее сообщество
Нет конечно
источник