当@include为false或@skip为true时,是否可以在graphql中使用空值UUID进行查询

时间:2018-03-05 03:21:27

标签: reactjs graphql apollo react-apollo apollo-client

对于Apollo GraphQL:

我试图在需要UUID的字段上进行查询。但如果变量为null,我就不需要该字段。我想知道最好的办法是什么?我目前正在传递一个默认的documentId来解决这个问题。

这是查询的示例

query GetOverview($initialFetch: Boolean!, $documentId: UUID!) {
  organization {
  name
  inode(id: $documentId) @include(if: $initialFetch) {
    ... on Inode {
      inodeId
      parent {
        inodeId
      }
    }
  }
}

变量: { initialFetch: true, documentId: ... }

这是我回来的错误

"Variable "$documentId" of required type "UUID!" was not provided."

1 个答案:

答案 0 :(得分:1)

我发现阿波罗跳过是我所需要的,它会完全跳过HoC。 https://www.apollographql.com/docs/react/basics/queries.html#graphql-skip

它也可能建议拆分查询,尤其是在这种情况下。 https://www.apollographql.com/docs/react/recipes/query-splitting.html

正确方法的Sudo代码:

query GetOrgName {
  organization {
    name
  }
}

query GetInode {
  inode(id: $documentId) {
    ... on Inode {
      inodeId
      parent {
        inodeId
      }
    }
  }
}

const splitQuery = compose(
  graphql(getOrgName, { name: "orgName" }), 
  graphql(getInode, { 
    name: "inode", 
    skip: props => !props.initialFetch
  })
)(Component);