В настоящее время у меня проблемы с мутацией Graphql. Элементы обновления жесткого кодирования работают, но вариант 2, в котором я передаю аргумент, - нет. В сети Google Dev Tools Network я вижу, что передаю [объект Object] как запрос элементов.
Я попытался перейти на приведенный ниже код, что привело к появлению любой ошибки и ошибки повторяющегося идентификатора args.
`{args.elements}`
Любые советы приветствуются. Кроме того, я не использую переменные, поскольку api, похоже, их не принимает ??
api.ts ВАРИАНТ 1: РАБОТАЕТ
export const mutateReq = (args: TW): AxiosPromise<TW[]> => {
const query = `
mutation {
update ( id:"${args.id}", name:"${args.name}", iconFile:"${args.iconFile}", elements:[
[
{id:"2",name:"element2",link:"https:",elements:[{id:"1",name:"element1",link:"https://",elements:[]}]}
],
[
{id:"3",name:"element3",link:"https://",elements:[{id:"4", name: "wr", link: "http://", elements: []}]}
],
[]
]){
id
name
iconFile
elements {
id name link
elements {
id name link
}
}
}
}`;
return axios({
url: url,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data: {
query: query,
},
});
};
api.ts ВАРИАНТ 2: НЕ РАБОТАЕТ
export const mutateReq = (args: TWorkSpace): AxiosPromise<TWorkSpace[]> => {
const query = `
mutation {
update ( id:"${args.id}" name:"${args.name}" iconFile:"${args.iconFile}" elements:${args.elements}){
id
name
iconFile
elements {
id name link
elements {
id name link
}
}
}
}`;
return axios({
url: url,
method: 'post',
headers: {
'Content-Type': 'application/json',
},
data: {
query: query,
},
});
};
тип данных args
{
id: "1" name: "1" iconFile: "icon.png"
elements: [
[
{id:"2",name:"element2",link:"https://",elements:[{id:"1",name:"element1",link:"https://",elements:[]}]}
],
[
{id:"3",name:"element3",link:"https://",elements:[{id:"4", name: "wr", link: "http:", elements: []}]}
],
[]
]
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш запрос GQL представляет собой строку, и когда вы попробуете elements:${args.elements}, он попытается преобразовать объект в строку, которая, скорее всего, будет похожа на [object Object], но вам нужно преобразовать ее в строку JSON, которая даст вам результат, который вы находясь в поиске.
Пытаться:
elements:${JSON.stringify(args.elements)}
Это работает для заданного вопроса. Однако, поскольку я хранил ключ с цитатами, он вернул ошибку (например: {"elements": {"id": "1"}). Хотите знать, почему graphql возвращает данные с "ключом", но не принимает "" при изменении ...
@javascriptnoob, можете ли вы пояснить, что вы имеете в виду, говоря о хранении ключей с цитатами? Можете ли вы предоставить фрагмент кода и полную информацию об ошибке?
Я храню данные из запроса graphql в состоянии redux. Получаемые мной данные хранятся в виде {"id": "1" ....}. В приведенной выше мутации я хотел использовать свое состояние в качестве аргументов. Однако, поскольку он хранится с "" на ключах (например, "id"), я не могу просто использовать данные, поскольку обновление мутации принимает id = "1", но не "id": "1".
Мое плохое, вам действительно стоит использовать это: JSON.stringify (obj) .replace (/ "([^"] +) ": / g, '$ 1:')
^ это удалит кавычки из всех ключей, хотя также удалит кавычки из крайних случаев, таких как '{"id": "th \\": ing "}', так что имейте в виду
избегайте использования строковых манипуляций / литералов, используйте вместо них переменные graphql.org/learn/queries/#variables