Не в состоянии изменить данные на внешнем интерфейсе с Apollo - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь создать приложение для бронирования на React-Native с использованием клиента Apollo с GraphQl

Я не могу вызвать мутацию на переднем конце.

Ниже приведены некоторыекод со схемой и как выглядит моя мутация.

Что я делаю не так?

Схема:

createReservation(
  data: ReservationCreateInput!
): Reservation!
type Reservation
implements Node {
  id: ID!
  name: String!
  hotelName: String!
  arrivalDate: String!
  departureDate: String!
}

Моя мутация:

const addReservationMutation = gql`
  mutation createReservation(
    $data: {
      name: String!
      hotelName: String!
      arrivalDate: String!
      departureDate: String!
    })

   {
     name
  }
`;

Кнопка, завернутая в компонент Mutation

<Mutation mutation={addReservationMutation}>
      {(addReservation, { data }) => (
        <Button
          title="Reserve your!"
          onPress={() => {
            addReservation({
              variables: {
                name: "Joe",
                hotelName: "LemonTree",
                arrivalDate: "06/05/2019",
                departureDate: "06/12/2019"
              }
            });
          }}
        />
      )}
    </Mutation>

Ошибка:

Syntax Error: Expected Name, found {
74 Requiring module "index.js", which threw an exception: Syntax Error: Expected Name, found {

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: {
              ^
4:       name: String!


NativeModules @ RNDebuggerWorker.js:1
c @ RNDebuggerWorker.js:1
"index.js", which threw an exception: Syntax Error: Expected Name, found {

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: {
              ^
4:       name: String!

handleException @ 
c @ RNDebuggerWorker.js:1
…:74 Requiring module "index.js", which threw an exception: Syntax Error: Expected Name, found {

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: {
              ^
4:       name: String!

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Используйте типы ввода, когда вам нужны составные поля для мутаций, пожалуйста, отметьте

https://graphql.org/graphql-js/mutations-and-input-types/

Ваша схема, мутация и код должны выглядеть примерно так же с типами ввода.

Схема:

input ReservationInput {
  name: String!
  hotelName: String!
  arrivalDate: String!
  departureDate: String!
}

Мутация:

mutation createReservation($data: ReservationInput ){
     name
}

Компонент:

<Mutation mutation={addReservationMutation}>
      {(addReservation, { data }) => (
        <Button
          title="Reserve your!"
          onPress={() => {
            addReservation({
              variables: {
                data: {
                  name: "Joe",
                  hotelName: "LemonTree",
                  arrivalDate: "06/05/2019",
                  departureDate: "06/12/2019"
               }
              }
            });
          }}
        />
      )}
</Mutation>
0 голосов
/ 07 июня 2019

Твоя мутация выглядит неправильно для меня.Разве это не должно быть так:

const addReservationMutation = gql`
  mutation onCreateReservation(
    $data: {
      name: String!
      hotelName: String!
      arrivalDate: String!
      departureDate: String!
    }) {
     createReservation(data: $data) {
       name
    }
  }
`;
...