Почему он непрерывно перечитывает graphQL каждую секунду? - PullRequest
0 голосов
/ 12 февраля 2020

Фильтрация данных с текущей датой-временем с помощью @ apollo /act-hooks useQuery () на сервере strapi с graphQL для моего приложения Front Js front. myComponent отображается после _app. js как дочерний компонент

myComponent. js

import { useQuery } from "@apollo/react-hooks";
import { MY_QUERY } from "../apollo/queries/home/home";

export default () => {

  let currentDateTime = new Date(Date.now());
  let currentIsoDateTime = currentDateTime.toISOString();
  const { data, loading, error } = useQuery(MY_QUERY, {
    variables: {
      currentIsoDateTime: currentIsoDateTime
    }
  });

  return <>{data}</>
}

Запрос

export const MY_QUERY = gql`
{
  query($currentIsoDateTime: DateTime){
    events(where:{DateTime_gt:$currentIsoDateTime}){
      id
      Title
      DateTime
    }
  }
}`;

currentDateTime изменяющееся время от времени и go для извлечения данных из graphQL, и оно становится бесконечным

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Запрос потребляет currentIsoDateTime, тогда эта переменная должна быть определена в состоянии:

const [currentIsoDateTime] = React.useState(() => new Date(Date.now()).toISOString() );
0 голосов
/ 12 февраля 2020

После загрузки данных apollo обновит состояние loading, что приведет к повторной визуализации вашего компонента. Теперь, поскольку Date создается внутри метода render, он будет создавать разное время при каждом рендеринге.

Это приведет к изменению переменных вашего GraphQL API, и apollo перезапустит вызов API с новыми переменными.

Вы можете проверить вкладку Сеть в консоли разработчика и увидеть, что каждый запрос вызывается с различным currentISODateTime значением

Чтобы избежать этого, вы можете повторно использовать начальную дату и время, инициализировав ее как Штат. например,

const [currentDateTime] = React.useState(() => new Date(Date.now()));
...