首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数组数组传递给graphql?

如何将数组数组传递给graphql?
EN

Stack Overflow用户
提问于 2022-11-02 15:33:47
回答 1查看 123关注 0票数 0

所以我有一个数组,我想把这个数组发送给graphql .

代码语言:javascript
复制
[{…}]
0: {id: 1, customers_top_competitors: 'asdfasd', top_competitors_url: 'https://www.asdfasd.com/', __typename: 'TopCompetitors'}
length: 1
[[Prototype]]: Array(0)

这是我的疑问..。

代码语言:javascript
复制
export const UPDATE_CUSTOMER_COMPETITORS = gql`
  mutation($customer_id: Int, $data: [TopCompetitorsInput]) {
    updateTopCompetitors(customer_id: $customer_id, data: $data)
  }
`;

我的模特们..。

代码语言:javascript
复制
input TopCompetitorsInput {
  TopCompetitorsInputArray: [TopCompetitorsInputElement]
}

input TopCompetitorsInputElement {
  id: Int
  customers_top_competitors: String
  top_competitors_url: String
}

无论我尝试什么,graphql都不喜欢数组的索引。带着这个错误回来..。

代码语言:javascript
复制
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的请求如下所示:如何从数据库中获取数组

代码语言:javascript
复制
  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]);

用户可以向数组中添加元素..。

代码语言:javascript
复制
  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来使代码工作的方法,这不可能是最好的方法。但也许这会对别人有帮助。这是起作用的..。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2022-11-02 15:43:40

在您的代码中,您说$data是TopCompetitorsInput类型的数组,它是一个具有字段TopCompetitorsInputArray的对象,其中有一个TopCompetitorsInputElement数组作为值。

或者更改:如果您只想传递您拥有的Array:

代码语言:javascript
复制
export const UPDATE_CUSTOMER_COMPETITORS = gql`
  mutation($customer_id: Int, $data: [TopCompetitorsInputElement]) {
    updateTopCompetitors(customer_id: $customer_id, data: $data)
  }
`;

或将其更改为仅输入,并将数据作为对象传递。

代码语言:javascript
复制
export const UPDATE_CUSTOMER_COMPETITORS = gql`
  mutation($customer_id: Int, $data: TopCompetitorsInput) {
    updateTopCompetitors(customer_id: $customer_id, data: $data)
  }
`;

根据您的输入类型,数据输入应该如下所示

代码语言:javascript
复制
{
  TopCompetitorsInputArray: <Your array here>
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74291789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档