React Native, GraphQL, Apollo - как создать мутацию для пакетной вставки - PullRequest
0 голосов
/ 12 ноября 2018

Мне нужно создать вызов мутации пакетной вставки в реагировать родной Вот мой код. пожалуйста, решите мою проблему. Я не знаю, где я сделал ошибку. пока данные onHandleSubmit не вставляются в таблицу.

При отправке только передаю массив объектов функции вызова пакетной мутации.

 onHandleSubmit = () => {
      const TestResponse = [
{
        id:1,
        userId:123,
        testId:4321,
        itemId:43545,
        attempt:true,

},
{
        id:2,
        userId:123,
        testId:4321,
        itemId:43546,
        attempt:false,

}
];
      const { ResponseStudentTestTrack = [] } = this.props;
        ResponseStudentTestTrack(TestResponse);
  }

Appsync Shema:

type StudentTestTrack {
    id: ID!
    userId: ID!
    testId: ID!
    itemId: ID!
    attempt: String!
}

type StudentTestTrackConnection {
    items: [StudentTestTrack]
    nextToken: String
}

input CreateStudentTestTrackInput {
    id: ID!
    userId: ID!
    testId: ID!
    itemId: ID!
    attempt: String!
}

type Mutation { 
batchcreateStudentTestTrack(studentTest: [CreateStudentTestTrackInput]!): [StudentTestTrack]
}

Аполлон звонит:

 graphql(CreateStudentTestTrack, {
    props: props => ({
      ResponseStudentTestTrack: TestResponse => props.mutate({
        variables: TestResponse,
        optimisticResponse: {
          __typename: 'Mutation',
          batchcreateStudentTestTrack: { ...TestResponse, __typename: 'CoursePatternStatus' },
        },
      }),
    }),
  }),

мутация:

export const CreateStudentTestTrack = gql`
mutation batchcreateStudentTestTrack{
  batchcreateStudentTestTrack(
    studentTest:[TestResponse]
  ) {
    id,
    userId,
    testId,
    itemId,
    attempt,
  }
}`;

1 Ответ

0 голосов
/ 15 ноября 2018

Кажется, что-то не так с мутацией на стороне клиента. Попробуйте это.

export const CreateStudentTestTrack = gql`
mutation abc ( // could be anyname
  $studentTest: [CreateStudentTestTrackInput] // Type of input mentioned in graphql definition
) {
  batchcreateStudentTestTrack(studentTest: $studentTest) {
    id,
    userId,
    testId,
    itemId,
    attempt,
  }
}`;

Также попробуйте удалить оптимистический ответ в параметре graphql, если вам не нужно обновлять кэш пользовательского интерфейса и если ваш вызов мутации только для вставки. Также я обновил объект mutate на основе моих решений. Пожалуйста, посмотрите на это тоже.

graphql(CreateStudentTestTrack, {
    props: props => ({
      ResponseStudentTestTrack: TestResponse => props.mutate({
        variables: {
          studentTest: TestResponse
        },
      }),
    }),
  }),

Также проверьте код уничтожения.

const { ResponseStudentTestTrack } = this.props; // don't set default value as array for a function prop.

Попробуйте этот код, и вы столкнетесь с проблемами ниже.

...