Graphql变异查询:如何访问数据元素

时间:2020-02-07 21:31:12

标签: reactjs typescript graphql frontend graphql-mutation

 const MUTATION_QUERY = gql`
  mutation MUTATION_QUERY(
    $name: bigint!
  ) {
    insert_name(
      objects: {
        name: $name
      }
    ) {
      returning {
        id
        name
      }
    }
  }
`;


const [onClick, { error, data }] = useMutation<{}, {}>(MUTATION_QUERY, {
        variables: {
          name: 1234,
        },
      });

我的变异查询是在表中插入名称并自动生成ID。在控制台上记录数据变量时,我可以查看数据对象中的字段ID和名称。但是我无法单独访问它们。我怎样才能console.log“ id”。谢谢。

console.log(data)看起来像:{insert_name: {...}}

扩展为:

insert_name: 
 returning: Array(1) 
   0: {id: 1, name: 1234} 
   length: 1 
   _proto_: Array(0) 
 _typename: "insert_name_mutation_response

3 个答案:

答案 0 :(得分:0)

您可以使用.

访问对象的字段

例如,如果您的对象看起来像这样-

data = {
  id: 1,
  name: 'Jane',
}

您只能使用data.id

获取ID

无论您的对象可能深入多少层,此方法都有效,因此以本示例-

data = {
  person: {
    id: 1,
    name: 'Jane',
  }
}

您可以使用data.person.id获取人员的ID。

答案 1 :(得分:0)

console.log(data.insert_name.returning[0].id)将为您提供返回的ID。

要使其在打字稿中正常工作,我们需要更改查询以添加数据的返回类型

const [onClick, { error, data }] = useMutation<{ReturnInsertNameProps}, {}>(MUTATION_QUERY, {
        variables: {
          name: 1234,
        },
      });

interface ReturnInsertNameProps {
  insert_name: ReturnQueryProps;
}

interface ReturnProps {
  returning: MessageProps[];
}

interface NameProps {
  id: number;
  name: number;
}

答案 2 :(得分:0)

如果我们要处理查询结果,也可以使用useMutation中提供的onCompleted方法。