对于嵌套连接,如何在getConfigs 中定义parentName、parentId 和connectionName?
How do you define parentName, parentId, and connectionName in getConfigs for a nested connection?
我 运行 遇到了在嵌套连接上编写中继突变的一些问题。这是类型结构:
{
viewer {
entity(id) {
events // mutate connection here
}
}
}
在 getConfigs 中,我有指向 "viewer" 的 parentName 和 parentID,但是 connectionName "events" 在查看器上不存在,它存在于 "entity" 类型上。
正如您将在下面的代码片段中看到的,我也不确定如何在 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
}
`;
}
如果我的问题没有任何意义,我非常乐意帮助澄清,所以请随时提出有关我的问题的问题。
感谢您的帮助!
对于将来遇到此问题的任何人,您不必担心再次传递 id 或处理嵌套 queries/fields。中继将只查找并更新客户端上的适当记录。 This issue on Github 对解决这个问题很有帮助,尤其是来自 freiksenet 的评论。
在上面的示例中 - 我们没有通过 viewer
,而是直接进入 entity
。
输出字段:
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)
将确保您不会 运行 在不为连接查询传递参数时出现问题,并且会回退到您上次的此类查询。
我 运行 遇到了在嵌套连接上编写中继突变的一些问题。这是类型结构:
{
viewer {
entity(id) {
events // mutate connection here
}
}
}
在 getConfigs 中,我有指向 "viewer" 的 parentName 和 parentID,但是 connectionName "events" 在查看器上不存在,它存在于 "entity" 类型上。
正如您将在下面的代码片段中看到的,我也不确定如何在 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
}
`;
}
如果我的问题没有任何意义,我非常乐意帮助澄清,所以请随时提出有关我的问题的问题。
感谢您的帮助!
对于将来遇到此问题的任何人,您不必担心再次传递 id 或处理嵌套 queries/fields。中继将只查找并更新客户端上的适当记录。 This issue on Github 对解决这个问题很有帮助,尤其是来自 freiksenet 的评论。
在上面的示例中 - 我们没有通过 viewer
,而是直接进入 entity
。
输出字段:
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)
将确保您不会 运行 在不为连接查询传递参数时出现问题,并且会回退到您上次的此类查询。