Вы можете получить доступ к loading
реквизиту Query из функции рендеринга реквизита следующим образом:
import gql from "graphql-tag";
import { Query } from "react-apollo";
const GET_DOGS = gql`
{
dogs {
id
breed
}
}
`;
const Dogs = ({ onDogSelected }) => (
<Query query={GET_DOGS}>
{({ loading, error, data }) => {
if (loading) return "Loading...";
if (error) return `Error! ${error.message}`;
return (
<select name="dog" onChange={onDogSelected}>
{data.dogs.map(dog => (
<option key={dog.id} value={dog.breed}>
{dog.breed}
</option>
))}
</select>
);
}}
</Query>
);
Проверьте документы для получения дополнительной информации.
Или вы можете передать эту опору вашему компоненту, используя HOC.
import { graphql } from 'react-apollo'
const Dogs = ({ loading, dogs }) => <div>{loading && "Loading..."}</div>
const withDogs = graphql(GET_DOGS, {
props: ({ data: { loading, error, dogs } }) => ({
loading,
error,
dogs
})
})
export default withDogs(Dogs)
Обратите внимание, что вам, вероятно, не нужно загружать данные непосредственно в обработчик событий, как вы.