Спецификация GraphQL включает подписки в выпуск Июнь 2018. Чтобы проиллюстрировать, насколько легко создать простой чат с Apollo Client, я привел минимальный пример. В примере используется серверная служба Graphcool.

Скриншот

Запрос подписки GraphQL

Graphcool поддерживает подписки, и вы можете написать запрос подписки следующим образом.

subscription Message {
  Message {
    mutation
    node {
      id
      createdAt
      text
      author
    }
  }
}

subscribeToMore

React Apollo предоставляет вспомогательную функцию subscribeToMore, которая позволяет объединить данные уведомления. Вот фрагмент кода.

const more = () => subscribeToMore({
  document: subscription,
  updateQuery: (prev, { subscriptionData }) => {
    if (!subscriptionData.data) return prev;
    const { mutation, node } = subscriptionData.data.Message;
    if (mutation !== 'CREATED') return prev;
    return Object.assign({}, prev, {
      allMessages: [node, ...prev.allMessages].slice(0, 20),
    });
  },
});

Полный код

К сожалению, сюда можно прикрепить не весь код. Посетите репозиторий GitHub, чтобы увидеть полный код. Он просто крошечный.

Рабочее приложение

Чтобы попробовать работающее приложение, посетите LimeGreenJS, найдите простой чат и нажмите ЗАПУСТИТЬ ПРИЛОЖЕНИЕ. Вы увидите что-то подобное на скриншоте выше.

Как вариант, вы можете запустить приложение по этой прямой ссылке.

Поиграйте с примером кода

Вы можете разветвить репо, и если вы настроите бэкэнд Graphcool и измените URL-адреса конечных точек в App.js, у вас будет собственное приложение, с которым вы можете поиграть. Просто отредактируйте код по своему усмотрению и запустите его в LimeGreenJS, чтобы увидеть изменения. (В настоящее время вам необходимо перезагружать браузер, прежде чем нажимать ЗАПУСТИТЬ ПРИЛОЖЕНИЕ каждый раз, когда вы меняете код. Я хочу улучшить это, используя подписки GraphQL, если GitHub API поддерживает это.)