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 и ребер там. Если вы этого не сделаете, вы можете сшить один и сделать то же самое, расширяя эти типы, а затем вы можете массировать данные.
На самом деле не существует простого способа манипулирования данными между производителем и потребителем, если они оба следуют стандарту, если только вы не выполняете сшивание и преобразования, которые изменяют схему. В этом случае у вас может быть отдельная конечная точка с собственными определениями схемы, которая преобразует внутреннюю точку в искомую структуру.