#reactjs #graphql #apollo #react-apollo #apollo-client
#reactjs #graphql #apollo #реагировать-apollo #apollo-клиент
Вопрос:
Я новичок в react / graphql / apollo, однако я следовал руководству о том, как выполнить запрос graphql с использованием Apollo наwww.apollographql.com. Однако, похоже, я не могу показать результат.
Это код, который я выполняю для выполнения запроса
import React from "react";
import { useQuery } from 'react-apollo';
import gql from "graphql-tag";
const GET_PRODUCTS = gql`
query getProducts{
products(first: 1) {
edges {
node {
id
name
}
}
}
}
`;
const StartPage = () => {
const { loading, error, returnData } = useQuery(GET_PRODUCTS, {
variables: {},
});
return (
<p>Hello world, this should be the data: {returnData}</p>
);
};
Я вижу только «Привет, мир, это должны быть данные»: но возвращаемые данные не печатаются?
Разве я не могу просто распечатать весь ответ?
Когда я перезагружаю страницу, я могу четко видеть на вкладке сети, что мой запрос выполняется, и я получаю правильный ответ
запрос
{"operationName":"getProducts","variables":{},"query":"query getProducts {n products(first: 1) {n edges {n node {n idn namen __typenamen }n __typenamen }n __typenamen }n}n"}
ответ
{"data":{"products":{"edges":[{"node":{"id":"UHJvZHVjdDo3Mg==","name":"Apple Juice","__typename":"Product"},"__typename":"ProductCountableEdge"}],"__typename":"ProductCountableConnection"}}}
Итак, у кого-нибудь есть идея, почему returnData не печатается / пуста?
Комментарии:
1. разве вы не можете просто скопировать / вставить больше кода из примера? …
if(loading)...
по какой-то причине …data
может быть переименован, но другим способом… Я думаю, что ранее не было опыта загрузки данных react
Ответ №1:
Это должно быть const { loading, error, data } = useQuery(GET_PRODUCTS, ...);
Примечание: data
вместо returnData
.
Когда вы разрушаете объекты, вам нужно быть точным, когда дело доходит до ключа. Если вам нужны данные для хранения в переменной с именем returnData
, вы могли бы сделать что-то вроде этого:
const { loading, error, data: returnData } = useQuery(GET_PRODUCTS, {
variables: {},
});
Также имейте в виду, что в React вы не можете просто отображать объекты внутри фигурных скобок, React ожидает строку или число. Для быстрой отладки вы могли бы добавить
return (
<p>Hello world, this should be the data: {JSON.stringify(returnData)}</p
);
В противном случае вы должны отображать данные из глубины возвращаемого объекта.
Комментарии:
1. Большое вам спасибо, это сработало! Только один последующий вопрос, что, если я просто хочу отобразить название этого первого продукта, учитывая предоставленный мной ответ на запрос, не так ли, как это должно быть напечатано: <p>Привет, это должны быть данные {JSON.stringify(data)}, имя: {data.products.edges[0].node.name }</p> однако это не работает?
2. Ах, неважно, я решил последующий вопрос. Оказывается, вам действительно нужно только печатать {data.products.edges[0].node.name } как только вы убедитесь, что данные загружены, сначала они не могут содержать эти объекты