Параметр паузы urql useQuery не приостанавливает запрос временно

Я пытаюсь с помощью следующего кода выполнить urql useQuery только сразу. Но по какой-то причине он вызывается при каждом повторном рендеринге.

В соответствии с документами https://formidable.com/open-source/urql/docs/basics/queries/ этот запрос должен быть приостановлен изначально при рендеринге, и он должен выполняться только при вызове из React.useEffect на крепление.

const [{ fetching, data, error }, reExecute] = useQuery({
  query: INITIAL_CONFIG_QUERY,
  pause: true
});

React.useEffect(() => {
  reExecute();
}, []);

Что может быть лучшим способом выполнить запрос только сразу, используя urql?

2 ответа

Решение

Сопровождающий urql здесь, я бы предположил, что если компонент будет перемонтировать, что-то происходит. Этот перехватчик никогда не должен приводить к перемонтированию оборачивающего компонента.

При этом вы всегда можете использовать useClient крючок, чтобы получить urql-client, а затем использовать client.query().toPromise() в этом хуке и используйте возвращенный результат.

В вашем случае это может быть:

const MyComponent = () => {
  const client = useClient();
  useEffect(() => {
     client.query(
       INITIAL_CONFIG_QUERY
     ).toPromise().then(result => /* do something */)
  }, [])
}

Это может быть ошибка urlq, но также может быть, что ваш компонент отключается и перемонтируется каждый раз при повторной визуализации родительского компонента.

Чтобы проверить это, добавьте:

React.useEffect(() => {
  console.log("Component was mounted.");
}, []);

И посмотрите, выводится ли оператор console.log более одного раза.

Другие вопросы по тегам