Обновление кеша мутаций не работает с vue-apollo и Hasura - PullRequest
0 голосов
/ 11 марта 2019

Я совершенно новичок в этих технологиях, и мне трудно обернуть голову вокруг этого, так что терпите меня. Итак, моя ситуация такова, что я развернул Hasura в Heroku и добавил некоторые данные, и сейчас пытаюсь реализовать некоторые функции, в которых я могу добавлять и редактировать определенные строки таблицы. В частности, я следовал за этим от Хасуры и этим от 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, которая не работает - плюс, большинство руководств / учебных пособий показывают то же самое без особых объяснений.

1 Ответ

1 голос
/ 11 марта 2019

Ладно, поэтому для любого глупца, как я, вот что я делал неправильно:

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

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

...