Параметр паузы 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 более одного раза.