Реагируйте на сброс состояний

#reactjs #graphql #apollo #primereact

Вопрос:

У меня есть компонент, который отображает данные из primereact. Я загружаю данные с сервера и устанавливаю offset состояние в главном компоненте для управления разбиением на страницы. Все хорошо, но когда я пытаюсь изменить страницу в таблице данных, она меняется, но быстро возвращается в исходное состояние.

введите описание изображения здесь

Вы можете видеть, что offset при изменении значение всегда возвращается к значению 0. Это происходит только при нажатии на следующую страницу в таблице данных.

 import React, { useState } from 'react'; import { useQuery } from '@apollo/client'; import '../../layout/customs/responsiveDatatable.scss'; import { clientAuthApiKey as client } from '../../client'; import { query } from '../../graphql/queries'; import ClientsTable from './ClientsTable';  function Clientes() {  const [searchInput] = useState('');  const [offset, setOffset] = useState(0);   const queryParams = {  client,  variables: {  input: {  pagination: { limit: 10, offset },  search: {  searchFields: ['name', 'email', 'document_id'],  searchTerm: searchInput || '',  },  orderBy: { field: 'name', direction: 'ASC' },  },  },  };   const { data, loading } = useQuery(query, queryParams);   const { items: clientes = [], total = 0 } = data?.clients || {};   console.log({ offset, loading, total });   return (  lt;div className=' p-grid growable p-container'gt;  lt;ClientsTable  loading={loading}  value={clientes}  emptyMessage='Error message'  rows={10}  total={total}  first={offset}  onPage={({ first }) =gt; setOffset(first)}  /gt;  lt;/divgt;  ); }  export default Clientes  

Данные, которые можно получить:

 import React from 'react'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column';  const ClientsTable = ({  loading,  value,  emptyMessage,  rows,  total,  onPage,  first, }) =gt; (  lt;DataTable  totalRecords={total}  loading={loading}  value={value}  paginator  lazy  paginatorTemplate='FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink'  emptyMessage={emptyMessage}  rows={rows}  onPage={onPage}  first={first}  gt;  lt;Column  body={(rowData) =gt; `${rowData.name} ${rowData.surname}`}  header='name'  headerStyle={{ width: '14em' }}  /gt;  lt;Column  field='email'  header='email'  headerStyle={{ width: '14em' }}  /gt;  lt;Column  body={() =gt; `Activa`}  header='State'  headerStyle={{ width: '7em' }}  /gt;  lt;/DataTablegt;  );  export default ResponsiveDataTable;   

Есть идеи, почему offset состояние сбрасывается? Спасибо Вам за все советы.

Комментарии:

1. Было бы интересно посмотреть, что ClientsTable получится.

2. Это случилось со мной, когда я случайно добавил циклическое обновление состояния через что-то вроде a useEffect с несоответствующими зависимостями.

3. Я обновлю сообщение четким примером, доступным для данных.

4. Да, я думал о том же, но у меня нет никакого эффекта использования ни в одном компоненте..

5. Ах, я думаю, что вам действительно нужно поместить обработку data?.clients в a useEffect с data?.clients зависимостью