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

Posted

技术标签:

【中文标题】当@include false 或@skip true 时,是不是可以在graphql 中使用空值UUID 进行查询【英文标题】:Is it possible to query in graphql with null value UUID when @include false or @skip true当@include false 或@skip true 时,是否可以在graphql 中使用空值UUID 进行查询 【发布时间】:2018-08-12 16:05:17 【问题描述】:

对于 Apollo GraphQL:

我正在尝试查询需要 UUID 的字段。但如果变量为空,我不需要该字段。我想知道处理这个问题的最佳方法是什么?我目前正在传递一个默认的 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."

【问题讨论】:

您可能会收到此特定错误,因为$documentId 被定义为不可为空。试试$documentId: UUID。在调用查询之前,您可能需要检查 initialFetchdocumentId 是否有效。 【参考方案1】:

我发现 Apollo skip 是我需要的,它可以完全跳过 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);

【讨论】:

以上是关于当@include false 或@skip true 时,是不是可以在graphql 中使用空值UUID 进行查询的主要内容,如果未能解决你的问题,请参考以下文章

为啥当 == 为空值返回 true 时 >= 返回 false?

为啥当键是 int[] 时 Dictionary.ContainsKey 返回 False? [复制]

纯PHP模板函数

“-Dmaven.test.skip.exec”与“-Dmaven.test.skip=true”和“-DskipTests”有啥区别?

Clojure布尔值true或false

当 skip_submission = true 时,Pilot 仍在 TestFlight 上分发