const sidebar = ({ selectedSidebarItem, selectItemCb }) => {
const doExcelExport = () => {
const data = client.readQuery({ query: getLeveransprojektOrders });
const rows = data.projectOrders.map(order => Object.keys(order).map(key => order[key]));
....
};
return (
<div className = "sidebar">
<button disabled = {some condition}>Export excel</button>
</div>
);
};
Мне нужно отключить кнопку, пока в кеше Apollo не появятся элементы. Есть ли какой-нибудь встроенный способ сделать это? Ничего не могу найти в документации.
Да, но как мне проверить, загружается ли запрос?





Вы можете получить доступ к Query's loading prop из функции render prop следующим образом:
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)
Обратите внимание, что вам, вероятно, не нужно загружать данные непосредственно в обработчик событий, как это делаете вы.
И как они появляются в кеше? Зачем нужно отключать кнопку, если в кеше нет элементов? Что, если вы просто проверите, пуст ли ваш массив данных? Или если запрос еще не завершен. Или и то, и другое: проверьте, имеет ли статус запроса
loadingили в массиве данных нет элементов.