У меня есть следующий компонент.
import React from 'react';
import { useQuery } from 'react-apollo-hooks';
import Table from 'components/Table';
import { useQueryParams } from 'customHooks';
import { LOCATIONS } from 'graphql/queries';
const useLocations = ({ filters, max, sorting }) => {
const variables = { max, filters, sorting };
return useQuery(LOCATIONS, { variables, fetchPolicy: 'network-only' });
};
const Search = ({ filters, sorting }) => {
// Gets the value for the parameter "max" from the URL, with default 100
const { max, updateURLParam } = useQueryParams({ max: 100 });
const { data, error, loading } = useLocations({ filters, sorting, max });
if (loading && !data.myData) return <div>Loading</div>;
if (error) return <div>Error</div>;
// Update the URL parameter "max"
// Example
// Before: https://localhost:3000/table?max=100
// After: https://localhost:3000/table?max=200
const handleReachBottom = () => updateURLParam({ max: max + 100 });
return <Table.Locations data={data} onReachBottom={handleReachBottom} />;
};
export default Search;
Я ожидал следующего поведения:
- Отображает «Загрузка»
- Отображает таблицу сданные
- Прокрутка к нижней части таблицы
- При извлечении новых данных таблица все еще отображается
- Когда данные извлекаются, таблица обновляется
До того, как я использовал компонент Query от Apollo, он работал именно так.Но когда я переключился на пакет реагировать-apollo-hooks , поведение изменилось на этот:
- Отображает «Загрузка»
- Отображает таблицу сdata
- Прокрутка вниз таблицы
- Отображение «Загрузка»
- При получении данных таблица обновляется
Почему это может быть?
ОБНОВЛЕНИЕ
Вот как я использовал это раньше:
import React from 'react';
import { Query } from 'react-apollo';
import Table from 'components/Table';
import useQueryParams from 'customHooks/useQueryParams';
const Locations = ({ filters, max, sorting, children }) => {
const variables = { max, sorting };
return (
<Query {...{ variables }} query={LOCATIONS} fetchPolicy='network-only'>
{children}
</Query>
);
};
const Search = ({ filters, sorting }) => {
const { max, updateURLParam } = useQueryParams({ max: 100 });
return (
<MyClient.Locations {...{ filters, sorting, max }}>
{({ data, loading, error }) => {
if (loading && !data.myData) return <div>Loading</div>;
if (error) return <div>Error</div>;
const handleReachBottom = () => updateURLParam({ max: max + 100 });
return (
<Table.Locations
data={data}
onReachBottom={handleReachBottom}
/>
);
}}
</MyClient.Locations>
);
};
export default Search;