代码之家  ›  专栏  ›  技术社区  ›  vwos

突变缓存更新不适用于vue apollo和Hasura

  •  0
  • vwos  · 技术社区  · 6 年前

    我对这些技术还不太熟悉,也很难把我的头绕在上面,所以请容忍我。所以,我的情况是,我已经在Heroku上部署了Hasura并添加了一些数据,现在正在尝试实现一些功能,在这些功能中,我可以添加和编辑表的某些行。特别是我一直在跟踪 this this 来自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 });
        }
      });
    },
    

    更新 变异的一部分。在大多数例子中 { data: { x } } x ,所以我也这么做了,尽管我不知道为什么(至少我很困惑)。记录时 data 已记录玩家数组,但在记录时 addPlayer undefined

    未定义 更新

    0 回复  |  直到 6 年前
        1
  •  1
  •   vwos    6 年前

    好吧,那么对于像我这样愚蠢的人来说,基本上我做错了以下几点:

    • 而不是 addPlayer update: (store, { data: { addPlayer } }) ,它应该是突变的名字,所以在本例中 insert_players
    • 默认情况下,Hasura的突变反应有 returning 字段,这是一个列表,因此添加的播放器是列表中的第一个元素,因此您可以按如下方式获取它: const addedPlayer = insert_players.returning[0];