Задача, которую я нашел довольно легко решаемой Apollo Client, - это реактивность пользовательского интерфейса. В какой-то момент при написании веб-приложений вы, вероятно, думали об эффективном способе обновления пользовательского интерфейса после изменения данных на стороне сервера. Здесь действительно сияет Apollo GraphQL.

Давайте нырнем!

Представьте, что у вас есть Bill модель, и у вас есть кнопка с надписью «Оплатить счет», которая запускает событие для оплаты счета на сервере; вот модель:

Чтобы пометить Bill как оплаченный, нам нужно использовать мутацию GraphQL, это должно обновить базу данных, и нам нужно это обновленное значение с сервера для обновления пользовательского интерфейса.

Вот интерфейс перед оплатой счета:

Вот это после:

Обновление практически мгновенное. Пока вы получаете id и обновленные свойства - в нашем случае это поле paid - после мутации Apollo будет обновлять пользовательский интерфейс реактивно. Нам не нужно было писать лишнюю строчку кода. Меньше написанного кода, меньше кода для отладки.

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

Нам нужно передать функцию в свойство Мутации update. Эта функция обновляет кеш Apollo новым объектом, например:

Функция updateBillsCache, переданная в опору обновления, считывает старый список из кеша, как любой запрос GraphQL, затем обновляет кеш, добавляя новое значение в массив. Таким образом, пользовательский интерфейс повторно отображается с обновленным значением.

Вот и все, с клиентом Apollo все просто! Приложение для оплаты счетов находится здесь: код