所以我有一个数组,我想把这个数组发送给graphql .
[{…}]
0: {id: 1, customers_top_competitors: 'asdfasd', top_competitors_url: 'https://www.asdfasd.com/', __typename: 'TopCompetitors'}
length: 1
[[Prototype]]: Array(0)这是我的疑问..。
export const UPDATE_CUSTOMER_COMPETITORS = gql`
mutation($customer_id: Int, $data: [TopCompetitorsInput]) {
updateTopCompetitors(customer_id: $customer_id, data: $data)
}
`;我的模特们..。
input TopCompetitorsInput {
TopCompetitorsInputArray: [TopCompetitorsInputElement]
}
input TopCompetitorsInputElement {
id: Int
customers_top_competitors: String
top_competitors_url: String
}无论我尝试什么,graphql都不喜欢数组的索引。带着这个错误回来..。
react_devtools_backend.js:4026 [GraphQL error]: Message: Variable "$data" got invalid value
{ 0: { id: 1, customers_top_competitors: "asdfasd", top_competitors_url: "https://www.asdfasd.com/",
__typename: "TopCompetitors" } }; Field "0" is not defined by type TopCompetitorsInput., Location: [object Object], Path: undefined感谢你的指导!
编辑:
Per @Disco的请求如下所示:如何从数据库中获取数组
let { data: all_data } = useQuery(GET_TOP_COMPETITORS, {
skip: !state.customers?.selected?.id,
variables: { customer_id: state.customers?.selected?.id },
});
useEffect(() => {
setcompetitorData(all_data?.getTopCompetitors);
}, [all_data]);用户可以向数组中添加元素..。
const AddCompetitor = () =>
{
if(highestCompetitorID){
//competitorData.push({id: highestCompetitorID, customers_top_competitors: '', top_competitors_url: ''});
setcompetitorData((competitorData) => [...competitorData, {id: highestCompetitorID, customers_top_competitors: '', top_competitors_url: ''}])
sethighestCompetitorID(competitorData[competitorData.length - 1].id + 1)
}else {
//competitorData.push({id: 1, customers_top_competitors: '', top_competitors_url: ''});
setcompetitorData((competitorData) => [...competitorData, {id: 1, customers_top_competitors: '', top_competitors_url: ''}]);
sethighestCompetitorID(competitorData[competitorData.length - 1].id + 1)
}
}编辑2:这是console.log(JSON.stringify(competitorData));...的结果
{"id":1,"customers_top_competitors":"sdfasfdfasdfsd","top_competitors_url":"https://www.asdfdfasd.com/","__typename":"TopCompetitors"}
编辑3:玩图形my界面,并尝试像我的反应发送的数据。再加一个成功的。


最后编辑:
因此,我找到了一种通过传递数组元素1到1来使代码工作的方法,这不可能是最好的方法。但也许这会对别人有帮助。这是起作用的..。
<Button
color="orange"
type="submit"
onClick={() => {
for(let x = 0; x < competitorData?.length; x++)
{
updateCustomerCompetitors({
variables: {
customer_id: state.customers?.selected?.id,
data: omit(competitorData[x], ["__typename"])
}
})
}
}
}
>
Submit
</Button>发布于 2022-11-02 15:43:40
在您的代码中,您说$data是TopCompetitorsInput类型的数组,它是一个具有字段TopCompetitorsInputArray的对象,其中有一个TopCompetitorsInputElement数组作为值。
或者更改:如果您只想传递您拥有的Array:
export const UPDATE_CUSTOMER_COMPETITORS = gql`
mutation($customer_id: Int, $data: [TopCompetitorsInputElement]) {
updateTopCompetitors(customer_id: $customer_id, data: $data)
}
`;或将其更改为仅输入,并将数据作为对象传递。
export const UPDATE_CUSTOMER_COMPETITORS = gql`
mutation($customer_id: Int, $data: TopCompetitorsInput) {
updateTopCompetitors(customer_id: $customer_id, data: $data)
}
`;根据您的输入类型,数据输入应该如下所示
{
TopCompetitorsInputArray: <Your array here>
}https://stackoverflow.com/questions/74291789
复制相似问题