web-dev-qa-db-fra.com

usequery retourne non défini, mais renvoie des données sur le terrain de jeu GQL

"@apollo/react-hooks": "^3.1.3",
"apollo-client": "^2.6.8",

Apollo Client retour non défini sur l'application réagissant, mais renvoie les données sur le terrain de jeu GQL, je ne comprends pas pourquoi ne fonctionne pas sur le côté client, mais fonctionne sur le terrain de jeu graphql.

schéma

J'ai défini union pour la requête de l'utilisateur pour la manipulation des erreurs.

type Query {
  user(id: ID!): UserReturn!
}

union UserReturn = User | Error

type User {
  id: ID!
  username: String!
  email: String
  profileUrl: String
  createdAt: Date
  ads: [Doc!]!
}


type Error {
  message: String
  code: ID
}

résolveur de requête

 async user(_, { id }, { User }) {
    console.log('query - User')
    try {
      await delay(1000 * 3)
      const user = await User.findById(id).populate('userData')
      console.log(user)
      if (!user) return {
        __typename: 'Error',
        message: 'User not found.',
        code: id
      }

      const { _id: id, username, email, createdAt, userData: { profileUrl } } = user

      console.log(username)
      return {
        __typename: 'User',
        id,
        username,
        email,
        createdAt,
        profileUrl
      }
    } catch (err) {
      console.log(err)
      return {
        __typename: 'Error',
        message: 'Something went wrong while getting user.',
        code: LogBack(err, `query/user?id=${id}`, __filename)
      }
    }
  }

lors de l'interrogation sur le terrain de jeu GQL

sur le terrain de jeu graphql, la requête fonctionne.

Screenshot from 2020-01-25 23-44-01_censored

sur le côté client

 const { data } = useQuery(
    gql`query user($id: ID!) {
      user(id: $id) {
        __typename
        ... on User {
          id
          username
          email
          profileUrl
          createdAt
          # ads
        }
        ... on Error {
          message
          code
        }
      }
    }
    `,
    {
      variables: {
        id: userId
      }
    }
  );

  console.log(data) // undefined

utiliser Sery fonctionne mais retourne indéfiend.

5
C.K

quelque chose qui pourrait aider, vous savez où vous appelez {Data} Vous pouvez également rechercher une erreur et console.log ('Erreur:', erreur)

vérifiez les documents de requête client Apollo

quelque chose comme ça et regardez le message d'erreur, cela devrait aider!

import { useQuery } from '@apollo/react-hooks';
import gql from 'graphql-tag';

const GET_GREETING = gql`
  query getGreeting($language: String!) {
    greeting(language: $language) {
      message
    }
  }
`;

function Hello() {
    const { loading, error, data } = useQuery(GET_GREETING, {
    variables: { language: 'english' },
  });
  if (loading) return 'Loading...';
  if (error) return `Error! ${error.message}`;
  return <h1>Hello {data.greeting.message}!</h1>;
}
0
Marc-Antoine

C'est une sorte de réponse tardive, mais j'ai eu le même problème où mon terrain de jeu a renvoyé une réponse correcte mais pas le crochet d'utilisation.

Mon problème était que la variable donnée à la requête, dans votre cas "ID", était de type chaîne au lieu du nombre.

0
Goowik