如果变量在GraphQL中为null,如何跳过查询?

如果变量在GraphQL中为null,如何跳过查询?,graphql,Graphql,我试图跳过一个查询,如果对象不在那里,但它似乎不工作,我想知道是否有任何解决方案 这是我的问题 graphql(GET_UBO_DECLARATIONS, { name: "getUboDeclarations", options: () => ({ fetchPolicy: "network-only" }) }), graphql(GET_UBOS, { name: "getUbos", skip: props =>

我试图跳过一个查询,如果对象不在那里,但它似乎不工作,我想知道是否有任何解决方案

这是我的问题

graphql(GET_UBO_DECLARATIONS, {
    name: "getUboDeclarations",
    options: () => ({
      fetchPolicy: "network-only"
    })
  }),
  graphql(GET_UBOS, {
    name: "getUbos",
    skip: props =>
      !props.getUboDeclarations ||
      !props.getUboDeclarations.getUboDeclarationsForThisUser,
    options: props => ({
      fetchPolicy: "network-only",
      variables: {
        _id: props.getUboDeclarations.getUboDeclarationsForThisUser._id
      }
    })
  }),
props.getUboDeclarations.getubodeclarationsforthis用户返回null,因此它应该为false并跳过查询

我相信您缺少getUbos查询中的位置

},

问题不在于跳过,而在于变量-无法保证这些选项的求值顺序,因此即使跳过的求值结果为true,也可能会调用options函数。如果调用它并且props.getUboDeclarations.getUboDeclarationsForThisUser实际上为null,则会出现TypeError,因为您试图读取null值的_id属性。修复方法是修改变量以考虑可能的空值:

variables: {
  _id: props.getUboDeclarations && props.getUboDeclarations.getUboDeclarationsForThisUser && props.getUboDeclarations.getUboDeclarationsForThisUser_id
}

请注意,您可以使用lodash's get之类的工具使这些空保护子句更易于处理。

这两个graphql查询是在同一个组合中吗?@PiyushBhati Yes您是说它不会被跳过,因为它发生了类型错误,对吗?谢谢您。很好的解释和很好的提示。
variables: {
  _id: props.getUboDeclarations && props.getUboDeclarations.getUboDeclarationsForThisUser && props.getUboDeclarations.getUboDeclarationsForThisUser_id
}