Javascript 在react本机应用程序中使用AWS Amplify获取GraphQL突变错误

Javascript 在react本机应用程序中使用AWS Amplify获取GraphQL突变错误,javascript,react-native,graphql,aws-amplify,Javascript,React Native,Graphql,Aws Amplify,尝试执行graphql变异,其中变异应采用自定义类型。在应用程序同步模式中,我定义了以下自定义类型: 模式: input CreateConversationInput { user: UserInput doctor: DoctorInput questionsAndAnsers: [ConversationQAInput] pet: UpdatePetInput } const createConversati

尝试执行graphql变异,其中变异应采用自定义类型。在应用程序同步模式中,我定义了以下自定义类型:

模式:

  input CreateConversationInput {
        user: UserInput
        doctor: DoctorInput
        questionsAndAnsers: [ConversationQAInput]
        pet: UpdatePetInput
    }
  const createConversationInput = {

        user: {
            username: "deep",
            userType: "Patient",
            fullName: "Deep A"
        },
        doctor: {
            name: "Raman",
            speciality: "dog",
            doctorId: "0bd9855e-a3f2-4616-8132-aed490973bf7"
        },
        questionsAndAnswers: [{ question: "Question 1", answer: "Answer 1" }, { question: "Question 2", answer: "Answer 2" }],
        pet: { username: "deep39303903", petId: "238280340932", category: "Canine" }


    }

    API.graphql(graphqlOperation(CreateConversation, createConversationInput)).then(response => {

        console.log(response);

    }).catch(err => {
        console.log(err);
    });
反应本机代码:

  input CreateConversationInput {
        user: UserInput
        doctor: DoctorInput
        questionsAndAnsers: [ConversationQAInput]
        pet: UpdatePetInput
    }
  const createConversationInput = {

        user: {
            username: "deep",
            userType: "Patient",
            fullName: "Deep A"
        },
        doctor: {
            name: "Raman",
            speciality: "dog",
            doctorId: "0bd9855e-a3f2-4616-8132-aed490973bf7"
        },
        questionsAndAnswers: [{ question: "Question 1", answer: "Answer 1" }, { question: "Question 2", answer: "Answer 2" }],
        pet: { username: "deep39303903", petId: "238280340932", category: "Canine" }


    }

    API.graphql(graphqlOperation(CreateConversation, createConversationInput)).then(response => {

        console.log(response);

    }).catch(err => {
        console.log(err);
    });
我对突变的定义如下:

export const CreateConversation = `mutation CreateConversation( $user: Object, 
    $doctor: Object, $questionsAndAnswers: Object, $pet: Object ) {

        createConversation(

             input : {

                user: $user
                doctor: $doctor
                questionsAndAnswers: $questionsAndAnswers
                pet: $pet
            }
        ){
    username
    createdAt

  }

  }`;
在AWS GraphQL控制台中,该变体工作正常。然而,在react原生应用程序中,我得到了一个错误

错误:

  input CreateConversationInput {
        user: UserInput
        doctor: DoctorInput
        questionsAndAnsers: [ConversationQAInput]
        pet: UpdatePetInput
    }
  const createConversationInput = {

        user: {
            username: "deep",
            userType: "Patient",
            fullName: "Deep A"
        },
        doctor: {
            name: "Raman",
            speciality: "dog",
            doctorId: "0bd9855e-a3f2-4616-8132-aed490973bf7"
        },
        questionsAndAnswers: [{ question: "Question 1", answer: "Answer 1" }, { question: "Question 2", answer: "Answer 2" }],
        pet: { username: "deep39303903", petId: "238280340932", category: "Canine" }


    }

    API.graphql(graphqlOperation(CreateConversation, createConversationInput)).then(response => {

        console.log(response);

    }).catch(err => {
        console.log(err);
    });
“类型UnknownType的验证错误:未知类型对象”


我认为错误是因为我将类型定义为突变中的对象,而不是AWS模式中定义的实际类型。如果这是问题所在,如何在React本机代码中定义自定义类型

您只需更改定义变量的方式即可:

mutation CreateConversation(
  $user: UserInput,
  $doctor: DoctorInput,
  $questionsAndAnswers: [ConversationQAInput],
  $pet: UpdatePetInput
) {
  createConversation(input: {
    user: $user
    doctor: $doctor
    questionsAndAnswers: $questionsAndAnswers
    pet: $pet
  }) {
    username
    createdAt
  }
}

在GraphQL中使用变量时,可以为该变量指定输入类型(或标量)。然后将其与使用变量的任何参数所期望的类型进行比较。这里的输入类型指的是模式中的一种类型,与JS无关,因此不需要在代码中添加任何特殊内容。

谢谢。将对象类型更改为模式中定义的类型后,它工作正常。