Обновление кеша мутаций не работает с vue-apollo и Hasura

Я совершенно новичок в этих технологиях, и у меня возникли проблемы с осознанием этого, так что терпите меня. Итак, моя ситуация такова, что я развернул Hasura на Heroku и добавил некоторые данные, а теперь пытаюсь реализовать некоторые функции, позволяющие добавлять и редактировать определенные строки таблицы. В частности, я следил за этим от Хасуры и this из vue-apollo.

Я реализовал добавление и редактирование (что работает), и теперь хочу также отразить это в таблице, используя свойство update мутации и обновив кеш. К сожалению, здесь я заблудился. Я вставлю часть своего кода ниже, чтобы прояснить мою проблему:

Мутация для добавления игрока (ADD_PLAYER_MUTATION) (такая же, как в документации Хасуры, ссылка на которую приведена выше):

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 часть - плюс, большинство руководств / руководств показывают то же самое без особых пояснений.


person vwos    schedule 11.03.2019    source источник


Ответы (1)


Хорошо, для такого глупца, как я, вот что я делал неправильно:

  • Вместо addPlayer в update: (store, { data: { addPlayer } }) должно быть любое имя мутации, поэтому в данном случае insert_players.
  • По умолчанию ответ на мутацию от Хасуры имеет поле returning, которое представляет собой список, и поэтому добавленный игрок является первым элементом в списке, поэтому вы можете получить его так: const addedPlayer = insert_players.returning[0];

Я не хотел просто удалять свой вопрос после того, как понял, что не так вскоре после его публикации, на случай, если это будет полезно другим людям, таким как я, поэтому я оставлю его.

person vwos    schedule 11.03.2019