Почему для обновления локального кэша в React Relay и Apollo Client требуется функция обновления / обновления? - PullRequest
0 голосов
/ 05 сентября 2018

Я рассматриваю возможность использования React Relay или клиента Apollo. Мне нравится идея GraphQL как языка запросов, который может быть выполнен для любого API или хранилища данных.

Однако меня удивляет необходимость вручную (и обязательно) обновить хранилище / кеш после простой мутации, такой как добавление элемента todo в список. Вот документация для функций обновления / обновления:

http://facebook.github.io/relay/docs/en/mutations.html https://www.apollographql.com/docs/react/essentials/mutations.html

Почему требуется определенная пользователем функция обновления?

В частности, почему я должен написать функцию средства обновления для обработки этих двух запросов GraphQL последовательно?

//Create todo item
mutation createTodo($input: TodoInput!) {
    createTodo(input: $input) {
        id
        name
        desc
    }
}

mutationVariables = { input: { name: 'Shopping', desc: 'Get groceries' }};


//Select all todos
query {
    todos {
        id
        name
        desc
    }
}  

Почему запрос todos не возвращает автоматически новый элемент todo? Это ТОЧКА декларативного языка запросов IMO.

1 Ответ

0 голосов
/ 06 сентября 2018

Идея обновления локального кэша состоит в том, чтобы минимизировать объем данных, передаваемых между клиентом и сервером.

Обновление локального кэша вручную полностью зависит от вас. Вы можете абсолютно точно запрограммировать свою мутацию, чтобы она возвращала новые или все задачи, после чего она обновит ваш локальный кеш. (это будет медленнее, чем обновление вручную, так как вам нужно будет дождаться ответа.) Есть несколько хороших вариантов использования для обновления вручную по сравнению с ожиданием ответа от сервера

С помощью apollo вы также можете отключить локальный кеш и просто использовать «только сеть» в качестве политики выборки.

...