0

我对这些技术完全陌生,并且难以理解它,所以请耐心等待。所以,我的情况是我已经在 Heroku 上部署了 Hasura 并添加了一些数据,现在我正在尝试实现一些功能,我可以在其中添加和编辑表格的某些行。具体来说,我从 Hasura 和vue-apollo一直在关注这个。

我已经实现了添加和编辑(有效),现在还想通过使用update突变的属性并更新缓存来在表中反映这一点。不幸的是,这就是我迷路的地方。我将在下面粘贴一些代码以使我的问题更清楚:

添加播放器 ( ADD_PLAYER_MUTATION) 的突变(与上面链接的 Hasura 文档中的突变相同):

mutation addPlayer($objects: [players_insert_input!]!) {
  insert_players(objects: $objects) {
    returning {
      id
      name
    }
  }
}

.vue文件中的突变代码

addPlayer(player, currentTimestamp) {
  this.$apollo.mutate({
    mutation: PLAYER_ADD_MUTATION,
    variables: {
      objects: [
        {
          name: player.name,
          team_id: player.team.id,
          created_at: currentTimestamp,
          updated_at: currentTimestamp,
          role_id: player.role.id,
          first_name: player.first_name,
          last_name: player.last_name
        }
      ]
    },
    update: (store, { data: { addPlayer } }) => {
      const data = store.readQuery({
        query: PLAYERS
      });
      console.log(data);
      console.log(addPlayer);
      data.players.push(addPlayer);
      store.writeQuery({ query: PLAYERS, data });
    }
  });
},

我真的没有得到update突变的一部分。在大多数示例中,该 { data: { x } }位使用函数的名称代替x,因此我也这样做了,即使我真的不明白为什么(至少对我来说很困惑)。记录data玩家数组时会记录,但记录时addPlayer undefined会记录。

我可能做错了对其他人来说非常简单的事情,但我显然不确定是什么。也许突变没有返回正确的东西(尽管我假设它不会undefined在那种情况下登录),或者根本没有返回任何东西。这尤其令人困惑,因为播放器实际上已添加到数据库中,所以它只是update不起作用的部分 - 另外,大多数指南/教程都显示相同的内容而没有太多解释。

4

1 回答 1

3

好的,所以对于像我这样愚蠢的人来说,这基本上是我做错的事情:

  • 而不是addPlayerin update: (store, { data: { addPlayer } }),它应该是突变的名称,所以在这种情况下insert_players
  • 默认情况下,来自 Hasura 的突变响应有一个returning字段,即一个列表,因此添加的玩家是列表中的第一个元素,因此您可以像这样获取它:const addedPlayer = insert_players.returning[0];

我不想在发布问题后不久就删除我的问题,以防这对像我这样的其他人有用,所以我会保留它。

于 2019-03-11T14:36:40.847 回答