中继边缘被视为相同

Relay edges treated as same

尽管数据不同,但我的一些中继边缘被视为相同。

例如,我想显示推荐电影列表。这些电影是根据用户喜欢的演员推荐的。

我希望我的数据是这样的:

{
  "data": {
    "movies": {
      "edges": [
        {
          "node": {
            "name": "Cool Movie 1",
            "myActor": {
              "name": "John Smith"
            }
          },
          "node": {
            "name": "Cool Movie 1", <- Same as movie above, different actor
            "myActor": {
              "name": "Mary Smith"
            }
          }
        }
      ]
    }
  }
}

但它 return 两个节点的参与者相同。

在我的 resolve() 我 return 一个中继连接。 是这样生成的:

let edges = movieIdAndActorIdPairs.map(({movieId, actorId}) => ({
      cursor: //,
      node: async () => {
          const dataRequirements = [getMovie(movieId), getActor(actorId)]
          let [movie, actor] = await Promise.all(dataRequirements)
          movie.myActor = actor
          return movie
      }
}))

当我记录 edges 时它显示正确的 myActor 但是当我在 Movie 类型上记录 myActor 字段时,它们都变成 约翰·史密斯.

个人node缺少一个id字段,导致所有节点(电影)有一个共同的id值。更新Relay store时,存储两个相同ID、相同内容的节点

在这里设置每个节点的id:

  node: async () => {
      const dataRequirements = [getMovie(movieId), getActor(actorId)]
      let [movie, actor] = await Promise.all(dataRequirements)
      movie.myActor = actor
      movie.id = movieId + actorId;
      return movie
  }

感谢所有帮助过我的人。

我已经尝试了建议的方法,但无法获得所需的数据集。

所以我采用了这种方法,其中 actorMovie 包含 actormovie 的单独字段:

{
  "data": {
    "actorMovies": {
      "edges": [
        {
          "node": {
            "movie": {
              name: "Cool Movie 1",
            },
            "myActor": {
              "name": "John Smith"
            }
          },
        }
      ]
    }
  }
}

这消除了重叠 ID 导致意外分组的担忧。