Попытка повторения неудачного запроса graphql с перехватами реагирования? - PullRequest
0 голосов
/ 10 января 2020

У меня есть следующий пример компонента, и я надеюсь, что при случайном сбое я могу нажать кнопку, чтобы повторить запрос вручную (через некоторое взаимодействие с пользователем). Это возможно случайно? Я также хотел бы, если результирующий запрос будет успешным, тогда страница будет заполнена данными (ie своего рода повторное рендеринг).

export default () => {
  let { loading, error, data } = useQuery(myGqlQuery)

  if (loading) {
    return <LoadingComponent />
  }

  const reassign = () => {
    // I want this function to somehow retry the query to see if error has subsided
  }

  if (error) {
    return <button onClick={reassign}>Retry Query</button>
  }

...

1 Ответ

0 голосов
/ 10 января 2020

Вы можете использовать useLazyQuery вместо useQuery.

https://www.apollographql.com/docs/react/data/queries/#executing -запросы-вручную

Таким образом, вам также придется звонить вручную на первый рендер внутри хука useEffect, но это легко.

export default () => {
  let [fnToCallQuery, { loading, error, data }] = useLazyQuery(myGqlQuery)

  React.useEffect(() => fnToCallQuery(), []);

  if (loading) {
    return <LoadingComponent />
  }

  if (error) {
    return <button onClick={_ => fnToCallQuery()}>Retry Query</button>
  }

  // return your jsx with fetched data

Что-то вроде кода выше:)

...