React Native、GraphQL、Apollo - 如何创建批量插入突变
Posted
技术标签:
【中文标题】React Native、GraphQL、Apollo - 如何创建批量插入突变【英文标题】:React Native, GraphQL, Apollo - how to create batch insert mutation 【发布时间】: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 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,
`;
【问题讨论】:
你的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, `;
【参考方案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.
试试这个代码,你会遇到下面的问题评论。
【讨论】:
以上是关于React Native、GraphQL、Apollo - 如何创建批量插入突变的主要内容,如果未能解决你的问题,请参考以下文章
使用 Relay + React Native (create-react-native-app) 时出错:GraphQL 验证错误`未知类型“查看器”。`
仅返回选定字段 React Native / GraphQL / Amplify
无法在 GraphQL 突变中传递数组 - React Native
我如何在 react-native 聊天应用程序中使用 GraphQl 订阅从 GraphQl 查询中获取实时更新