правильный способ вызвать мутацию GraphQL из реакции с помощью хуков

Я определил следующую мутацию и тип ввода:

extend type Mutation {

    signup(input: SignupReq!): SignupStatus!

}

input SignupReq {
    email: String!
    password: String!
}

используя площадку graphql:

mutation signup{signup(input:{password:"blabla", email: "[email protected]"}){success, message}}

он возвращает:

{
  "data": {
    "signup": {
      "success": true,
      "message": "Success!"
    }
  }
}

чего я и ожидал.

но как мне вызвать эту мутацию из моего клиента React?

то, что у меня есть сейчас:

const SIGNUP_MUTATION = gql`
  mutation SignupUser($input: SignupReq!) {
    signup(signupReq: $input) {success, message, token}
  }
`

  const [email, setEmail] = useState('')
  const [password, setPassword] = useState('')


const [signup, { data, loading, error }] = useMutation(SIGNUP_MUTATION)


const { data, loading, error } = await signup({ variables: { email, password } })


что довольно стандартно.

но я упускаю кое-что, что просто не могу определить. Причина запуска сценария React дает мне следующее сообщение об ошибке:

'Field "signup" argument "input" of type "SignupReq!" is required, but it was not provided.',

Как мне сделать правильный вызов Graphql из реакции. Мне не удалось найти никакой документации о том, как использовать типы ввода для мутаций из React.

любая помощь приветствуется.

Ким


person Kim Gabrielsen    schedule 23.08.2020    source источник
comment
читайте о передаче переменных ... используйте переменные в graphiql / игровую площадку ... код позже   -  person xadm    schedule 23.08.2020
comment
graphqlmaster.com/blog/   -  person xadm    schedule 23.08.2020


Ответы (1)


Вы передаете email и password в качестве переменных в свою мутацию:

variables: { email, password }

Вместо этого, как вы можете видеть из вашей мутации, вы должны передать переменную input:

variables: {
  input: {
    email,
    password
  }
}

Это будет работать, так как затем будет отражать тип, используемый в вашей схеме GraphQL:

input SignupReq {
  email: String!
  password: String!
}
person Lucas    schedule 23.08.2020