我遇到了在嵌套连接上编写Relay Mutation的一些问题。这是类型结构:
{
viewer {
entity(id) {
events // mutate connection here
}
}
}
在getConfigs中,我将parentName和parentID都指向" viewer"但是connectionName" events"它不存在于"实体"类型。
正如您将在下面的代码片段中看到的,我也不确定如何在getFatQuery中使用变量来获取具有实体ID的变异数据。
getConfigs和getFatQuery:
getConfigs() {
return [{
type: 'RANGE_ADD',
parentName: 'viewer',
parentID: this.props.viewer.id,
connectionName: 'events',
edgeName: 'eventEdge',
rangeBehaviors: {
'': 'append'
},
}];
}
getFatQuery() {
return Relay.QL`
fragment on addEventPayload {
viewer {
entity(id: $entityId) // how do I use variables in the getFatQuery {
events(first: 20) {
edges {
node {
status
}
}
}
}
},
eventEdge
}
`;
}
如果没有任何意义,我非常乐意帮助澄清我的问题所以请随时提出有关我的问题的问题。
感谢您的帮助!
答案 0 :(得分:3)
对于将来遇到此问题的任何人,您不必担心再次传入id或处理嵌套查询/字段。 Relay将在客户端上查找并更新相应的记录。 This issue on Github有助于解决这个问题,尤其是来自freiksenet的评论。
在上面的示例中 - 我们只是直接转到viewer
,而不是通过entity
。
outputFields:
outputFields: {
eventEdge: {
type: eventEdge,
resolve: async({event}) => {
const eventsByOwner = await Event.getEventsByOwnerId(event.ownerId)
const eventIndex = eventsByOwner.findIndex(evt => evt.id == event.id);
const cursor = offsetToCursor(eventIndex);
return {
cursor: cursor,
node: event
};
}
},
entity: {
type: entity,
resolve: async({event}) => {
return Entity.getEntity(event.ownerId)
}
},
}
getConfigs和getFatQuery:
getConfigs() {
return [{
type: 'RANGE_ADD',
parentName: 'entity',
parentID: this.props.entityId,
connectionName: 'events',
edgeName: 'eventEdge',
rangeBehaviors: {
'': 'append'
},
}];
}
getFatQuery() {
return Relay.QL`
fragment on addEventPayload @relay(pattern: true) {
entity {
events
},
eventEdge
}
`;
}
注意:使用@relay(pattern: true)
可确保您在未通过连接查询的参数时遇到问题,并将回退到此类型的上一次查询。