【问题标题】:React Native, GraphQL, Apollo - how to create batch insert mutationReact Native、GraphQL、Apollo - 如何创建批量插入突变
【发布时间】:2019-04-14 21:25:48
【问题描述】:

我需要在 react native 中创建一个批量插入突变调用这是我的代码。请你解决我的问题。我不知道我在哪里做错了。而 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 Sh​​ema:

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,
  }
}`;

【问题讨论】:

  • 你的ResponseStudentTestTrack是什么类型的,来自props?
  • 它是一个对象数组,如下所示 const TestResponse = [ { id:1, userId:123, testId:4321, itemId:43545, attempt:true, }, { id:2, userId: 123,testId:4321,itemId:43546,尝试:假,}
  • 那我不明白。你怎么称呼它:ResponseStudentTestTrack(TestResponse); 如果它是一个数组,你需要使用concat
  • 是的,我们可以通过 props 调用 ResponseStudentTestTrack。只有 concat 值通过 ResponseStudentTestTrack(TestResponse) 传递。
  • 只是我想知道如何在这个突变调用中传递对象值数组,而不是它对我来说工作正常。 export const CreateStudentTestTrack = gql` 突变 batchcreateStudentTestTrack{ batchcreateStudentTestTrack( studentTest:[TestResponse] ) { id, userId, testId, itemId, attempt, } }`;

标签: react-native graphql aws-appsync appsync-apollo-client


【解决方案1】:

客户端突变似乎有问题。试试这个。

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,
  }
}`;

如果不需要更新 ui 缓存并且您的突变调用仅用于插入,请尝试在您的 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.

试试这个代码,你会遇到下面的问题评论。

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 2017-10-25
    • 2018-07-15
    • 2020-11-04
    • 2020-07-15
    • 2020-04-24
    • 2019-02-02
    • 2020-04-11
    • 2017-01-15
    相关资源
    最近更新 更多