"@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.
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.
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>;
}
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.