Reactjs 反应继电器:向边缘添加数据

Reactjs 反应继电器:向边缘添加数据,reactjs,graphql,relayjs,graphql-js,Reactjs,Graphql,Relayjs,Graphql Js,我将首先介绍我的应用程序:简单投票应用程序,用户可以在其中创建和投票。简单。 目前,我的graphql模式由用户类型、轮询类型和投票类型组成,其中用户和轮询使用中继连接与投票有一对多关系。 投票类型包含时间戳和实际投票值,以及对其投票者和投票的引用 现在,据我所知,与graphql列表相比,使用连接的优点之一是能够在边缘存储数据(除了分页和更多…)。 我怎么能这么做 如果确实可行,我的计划是摆脱投票类型,通过连接直接连接用户和他的投票投票,并将投票值及其时间戳存储在连接边缘上 如果这很重要,则投

我将首先介绍我的应用程序:简单投票应用程序,用户可以在其中创建和投票。简单。
目前,我的graphql模式由用户类型、轮询类型和投票类型组成,其中用户和轮询使用中继连接与投票有一对多关系。 投票类型包含时间戳和实际投票值,以及对其投票者和投票的引用

现在,据我所知,与graphql列表相比,使用连接的优点之一是能够在边缘存储数据(除了分页和更多…)。 我怎么能这么做

如果确实可行,我的计划是摆脱投票类型,通过连接直接连接用户和他的投票投票,并将投票值及其时间戳存储在连接边缘上


如果这很重要,则投票者和其投票之间的连接应该是双向的,即每个用户都连接到其投票的投票,并且每个投票都连接到其投票者

听起来你已经很接近得到你想要的了。我认为使用投票类型作为用户和投票之间的中间人是一个很好的解决方案。这样做将允许您发出类似以下内容的查询:

//方向1:用户->投票->投票
查询GetUser($id:“abc”){
getUser(id:$id){
用户名
表决(第一:10){
边缘{
节点{
价值
民意测验{
名称
}
}
光标
}
}
}
}
//方向2:投票->投票->用户
查询GetPoll($id:“xyz”){
getPoll(id:$id){
名称
表决(第一:10){
边缘{
节点{
价值
使用者{
用户名
}
}
光标
}
}
}

}
如中所述,使用单独的
投票
实体可能更好地建模,但是,为了解决“如何定义边缘上的附加字段?”这一更一般的问题,请注意,您可以将
edgeFields
传递到
connectionDefinitions
函数中

有一个例子:


谢谢你详细的回答!但是由于边缘已经扮演了中间人的角色,我认为最好去掉投票类型,只对作为用户的投票者进行分页,投票值将存储在连接边缘上,而不是使用无用的投票类型。你不认为这样会更好吗?我想再次感谢你的回答,我会把wincent的答案标记为答案,因为这是我的基本要求,但你的答案非常有用,谢谢!“如果这很重要,那么投票者和他的投票之间的连接应该是双向的,即每个用户都连接到他的投票投票,并且每个投票都连接到它的投票者。”-是的,这看起来非常重要。边特定于一个连接,这里有两个连接,因此每个连接都需要不同的边。如果有两种投票关系,那么选民-投票-投票关系的真相来源在哪里?我明白你的意思,我只是把投票类型看作一个额外的调解人,因为我已经有了联系,但你可能是对的。
var {connectionType: friendConnection} = connectionDefinitions({
  name: 'Friend',
  nodeType: userType,
  resolveNode: edge => allUsers[edge.node],
  edgeFields: () => ({
    friendshipTime: {
      type: GraphQLString,
      resolve: () => 'Yesterday'
    }
  }),
  connectionFields: () => ({
    totalCount: {
      type: GraphQLInt,
      resolve: () => allUsers.length - 1
    }
  }),
});