首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中继在使用“`setVariables`”后生成无效查询--我是否做错了什么?

中继在使用“`setVariables`”后生成无效查询--我是否做错了什么?
EN

Stack Overflow用户
提问于 2016-11-03 00:40:05
回答 1查看 55关注 0票数 1

出于某种原因,如果我生成一个根查询,在注入子组件之前接受参数,如下所示:

代码语言:javascript
复制
import Relay from 'react-relay';

export default {
  production: (Component) => Relay.QL`
    query {
      getProduction(id: $productionId) {
        ${Component.getFragment('production')}
      }
    }
  `
};

中继最初生成此查询:

代码语言:javascript
复制
query MyProductionDetailsQuery($id_0:ID!,$where_1:ProductionRoleWhereArgs!) {
  getProduction(id:$id_0) {
    id,
    ...F0
  }
}
fragment F0 on Production {
  id,
  ...
  _roles4oPiwv:roles(first:10,where:$where_1) {
    edges {
      node {
        id,
        ...
      },
      cursor
    },
    pageInfo {
      hasNextPage,
      hasPreviousPage
    }
  }
}

变量:

代码语言:javascript
复制
{id_0: "UHJvZHVjdGlvbjoxNg==", where_1: {archived: {eq: true}}}

但是,如果组件的中继容器有自己的变量,那么运行this.props.relay.setVariables({...variables})将中继生成的请求查询完全更改为如下所示:

代码语言:javascript
复制
query My_production_details_page_ProductionRelayQL($id_0:ID!,$where_1:ProductionRoleWhereArgs!) {
  node(id:$id_0) {
    ...F0
  }
}
fragment F0 on Production {
  id,
  _roles6J5gK:roles(first:10,where:$where_1) {
    edges {
      node {
        id,
        ...
      },
      cursor
    },
    pageInfo {
      hasNextPage,
      hasPreviousPage
    }
  }
}

变量:

代码语言:javascript
复制
{id_0: "UHJvZHVjdGlvbjoxNg==", where_1: {archived: {eq: false}}}

但是,如果我有一个没有参数的根查询,那么setVariables可以正常工作:

代码语言:javascript
复制
import Relay from 'react-relay';

export default {
  viewer: (Component, variables) => Relay.QL`
    query {
      viewer {
        ${Component.getFragment('viewer', { ...variables })}
      }
    }
  `
};

下面是生成的查询:

代码语言:javascript
复制
query ViewerQuery($where_0:ProductionWhereArgs!) {
  viewer {
    ...F0
  }
}
fragment F0 on Viewer {
  user {
    _productions2IPZAw:productions(first:10,where:$where_0) {
      edges {
        node {
          id,
          ...
        },
        cursor
      },
      pageInfo {
        hasNextPage,
        hasPreviousPage
      }
    },
    id
  }
}

变量:

代码语言:javascript
复制
{where_0: {expDate: {gt: "2016-11-04T16:29:11.677Z"}, archived: {eq: false}}}

在工作设置中的setVariables之后:

代码语言:javascript
复制
query ViewerQuery($where_0:ProductionWhereArgs!) {
  viewer {
    ...F0
  }
}
fragment F0 on Viewer {
  user {
    _productions1CyNvL:productions(first:10,where:$where_0) {
      edges {
        node {
          id,
          ...
        },
        cursor
      },
      pageInfo {
        hasNextPage,
        hasPreviousPage
      }
    },
    id
  }
}

变量:

代码语言:javascript
复制
{where_0: {expDate: {lt: "2016-11-04T16:34:12.537Z"}, archived: {eq: false}}}

版本:

代码语言:javascript
复制
"react-relay": "^0.9.3",
"react-router-relay": "^0.13.5"

我不确定我是否在配置上做错了什么,或者是否只是中继端的一个bug。

有人知道是什么导致了这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-04 00:28:14

当您运行setVariables时,它将导致只重取必要的数据。中继查看通过更改变量和来自GraphQL服务器的请求需要片段来影响查询的哪一部分。这是可能的,因为节点接口(即通过不透明的中继id获取对象)。请参阅文档中的更多内容。

我认为,在您的示例中,您应该在GraphQL服务器上为生产类型实现Node。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40392045

复制
相关文章

相似问题

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