Почему данные фрагмента извлекаются, но недоступны при мутации Relay

У меня есть мутация (код), в котором я хочу удалить узел. Он зависит от идентификатора строки сообщения, который является первичным ключом строки в базе данных, и идентификатора зрителя. Когда соответствующий компонент (код). Отправляются следующие запросы

query Queries {
  viewer {
    id,
    ...F1
  }
}
fragment F0 on Viewer {
  id
}
fragment F1 on Viewer {
  id,
  ...F0
}

а также

query Queries($id_0:ID!) {
  post(id:$id_0) {
    id,
    ...F2
  }
}
fragment F0 on Post {
  id,
  rowId
}
fragment F1 on Post {
  rowId,
  id
}
fragment F2 on Post {
  headline,
  body,
  id,
  ...F0,
  ...F1
}

Ответ, который я получаю, включает viewer.id и post.rowId. Как вы можете видеть здесь,

{
  "data": {
    "post": {
      "id": "cG9zdDo0",
      "headline": "You hit me with a cricket bat.",
      "body": "Hello.",
      "rowId": 4
    }
  }
}

и тут,

{
  "data": {
    "viewer": {
      "id": "viewer"
    }
  }
}

Однако, когда я хочу передать их DeletePostMutation вот так this.props.post.id, они undefined. Когда я проверяю this.props.post, я получаю следующее

консоль


person Ferdinand Salis-Samaden    schedule 07.08.2016    source источник


Ответы (1)


Ошибка предполагает, что реквизиты, переданные DeletePostMutation, не являются данными, полученными Relay, и глядя на код кажется, что вы создаете новый объект для сообщения и просмотрщика, а не для отправки публикации и просмотра, полученных ретранслятором.

Я вижу, вы делаете это:

  handleDelete(event) {
    this.props.relay.commitUpdate(
      new DeletePostMutation({
        post: { rowId: this.props.post.rowId },
        viewer: { id: this.props.viewer.id },
      })
    )
  }

Попробуйте это вместо этого:

  handleDelete(event) {
    this.props.relay.commitUpdate(
      new DeletePostMutation({
        post: this.props.post,
        viewer: this.props.viewer,
      })
    )
  }

Поскольку вы уже компонуете фрагменты GraphQL DeletePostMutation внутри Контейнера Post Relay, внутри DeletePostMutation каждое свойство должно иметь поля, определенные в доступных фрагментах.

person Jose R. Cruz    schedule 07.08.2016
comment
@ jose-r-cruz большое спасибо. Ломать голову сейчас. Надо было подумать об этом ???? - person Ferdinand Salis-Samaden; 07.08.2016