出于某种原因,如果我生成一个根查询,在注入子组件之前接受参数,如下所示:
import Relay from 'react-relay';
export default {
production: (Component) => Relay.QL`
query {
getProduction(id: $productionId) {
${Component.getFragment('production')}
}
}
`
};中继最初生成此查询:
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
}
}
}变量:
{id_0: "UHJvZHVjdGlvbjoxNg==", where_1: {archived: {eq: true}}}但是,如果组件的中继容器有自己的变量,那么运行this.props.relay.setVariables({...variables})将中继生成的请求查询完全更改为如下所示:
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
}
}
}变量:
{id_0: "UHJvZHVjdGlvbjoxNg==", where_1: {archived: {eq: false}}}但是,如果我有一个没有参数的根查询,那么setVariables可以正常工作:
import Relay from 'react-relay';
export default {
viewer: (Component, variables) => Relay.QL`
query {
viewer {
${Component.getFragment('viewer', { ...variables })}
}
}
`
};下面是生成的查询:
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
}
}变量:
{where_0: {expDate: {gt: "2016-11-04T16:29:11.677Z"}, archived: {eq: false}}}在工作设置中的setVariables之后:
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
}
}变量:
{where_0: {expDate: {lt: "2016-11-04T16:34:12.537Z"}, archived: {eq: false}}}版本:
"react-relay": "^0.9.3",
"react-router-relay": "^0.13.5"我不确定我是否在配置上做错了什么,或者是否只是中继端的一个bug。
有人知道是什么导致了这个问题吗?
发布于 2016-11-04 00:28:14
当您运行setVariables时,它将导致只重取必要的数据。中继查看通过更改变量和来自GraphQL服务器的请求需要片段来影响查询的哪一部分。这是可能的,因为节点接口(即通过不透明的中继id获取对象)。请参阅文档中的更多内容。
我认为,在您的示例中,您应该在GraphQL服务器上为生产类型实现Node。
https://stackoverflow.com/questions/40392045
复制相似问题