Apollo Link мутация данных

Я пытаюсь изменить данные в обработчике apollo-link для всего приложения: я хочу удалить все ребра / узлы, чтобы упростить обработку данных в моем приложении.

const consoleLink = new ApolloLink((operation, forward) => {
  return forward(operation).map((data) => {
    let data = getRidOfEdges(inData)
    return data
  })
})

Когда я пытаюсь изменить данные и вернуть измененную копию данных, обработчик apollo в моих компонентах vue получает пустой объект данных ={}, Я также попытался изменить данные на месте, но это тоже не сработало: компонент vue получает оригинал без изменений data,

apollo: {
  moduleQuery: {
    query: MODULE_DETAILS_QUERY,
    variables: {
      slug: 'video'
    },
    fetchPolicy: 'network-only',
    manual: true,
    result({data, loading, networkStatus}) {
        // after mutating data, I get
        // data == {}
    }

Чем объясняется такое поведение? И как я могу реализовать ссылку Apollo, чтобы иметь возможность изменять данные? Это вообще возможно?

1 ответ

Если клиент является клиентом GraphQL и ожидает, что данные будут существовать в соответствии с определениями GraphQL, он сбросит все данные, которые не соответствуют этой модели. Если вы управляете сервером, просто добавьте массив узла в корень соединения. Это не должно быть ТОЛЬКО pageInfo и ребер там. Если вы этого не сделаете, вы можете сшить один и сделать то же самое, расширяя эти типы, а затем вы можете массировать данные.

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

Другие вопросы по тегам