Контейнер Apollo Client React добавляет созданный элемент в список элементов с разбивкой на страницы без повторной загрузки

Это название довольно запутанно, но я постараюсь объяснить как можно лучше. У меня есть ситуация, когда я собираю и отображаю список элементов данных с сервера в React Native. Он использует запрос, который отправляет параметр GraphQL на сервер, чтобы ограничить первоначальный запрос первыми 15 элементами.

query GetElements ($count: Int) {
    elements (count: $count) {
            id
            name
            tye
    }
}

Как указывалось ранее, это будет запрашивать основной список с начальным количеством 15 элементов.

У меня есть еще одна страница приложения, на которой пользователь может создать новый элемент в бэкэнде, используя другой запрос GraphQL.

Мой вопрос: есть ли способ легко обновить основной список элементов, чтобы включить вновь созданный элемент без выполнения каких-либо дополнительных сетевых запросов? Другими словами, я хочу иметь возможность просто добавлять новый элемент в основной список элементов всякий раз, когда команда создания выполняется успешно.

Проблема в следующем: команда Apollo readQuery на прокси-сервере обновления не вернет мне соответствующий набор данных для обновления, если я не знаю переменные, которые были отправлены с первоначальным запросом; это включает в себя переменную пагинации count.


person Guardian_nw    schedule 03.06.2017    source источник
comment
Я знаю, что это можно сделать хорошо, используя опцию updateQueries, но я знаю, что команда Apollo пытается отвлечь людей от этого прямо сейчас.   -  person Guardian_nw    schedule 04.06.2017


Ответы (2)


Теперь вы можете определить ключ для хранилища кеша запросов следующим образом:

 query AllItems($cursor: String, $limit: Int, $query: String) {
  items(cursor: $cursor, limit: $limit, query: $query) @connection(key: "AllItemsQuery") {
    count
    cursor
    has_next
    has_prior
    data{
      ...CoreItem
    }
  }
}
person Manzo    schedule 07.07.2017
comment
Я должен изучить это. Это может быть хорошим способом справиться с ситуацией. Так позволяет ли это мне обновить существующий запрос, если он содержит тот же ключ подключения? - person Guardian_nw; 08.07.2017
comment
@Guardian_nw, как вы будете обновлять AllItemsQuery, если элементы будут удалены - person johndavedecano; 18.08.2017
comment
guardian_nw, да, и используйте фильтры для определения переменных запроса для добавления к ключу, что позволяет вам опустить курсоры и т. д. @johndavedecano, используя тот же поток обновления, что и для вставки нового объекта, просто нарежьте массив хранилища. dev.apollodata.com/react/ - person Manzo; 18.08.2017
comment
Допустим, у меня есть USER_IMAGES_CONNECTION в качестве директивы соединения, как я могу запросить это соединение? - person johndavedecano; 18.08.2017
comment
Вы спрашиваете, как получить доступ к результатам запроса из хранилища данных, чтобы удалить элемент? Если это так, вы просто используете DataProxy: dev.apollodata.com/core /apollo-client-api.html#DataProxy - person Manzo; 19.08.2017

если вы просто хотите получить добавленный элемент, похоже, вам нужны подписки :: http://dev.apollodata.com/react/subscriptions.html

person kkemple    schedule 03.06.2017
comment
Спасибо, Курт, но я не думаю, что это то, что я ищу: я хочу иметь возможность обновлять этот список без дополнительного сетевого трафика. - person Guardian_nw; 04.06.2017