Чтобы выполнить запрос с помощью Apollo, вы можете сделать это с помощью рендеринга реквизита или hooks .
https://www.apollographql.com/docs/react/data/queries/
В зависимости от того, используете ли вы компонент класса или функциональный компонент.
В этих примерах вы должны обрабатывать состояние загрузки и ошибки, например,
const { loading, error, data } = useQuery(GET_DOGS);
if (loading) return 'Loading...';
if (error) return `Error! ${error.message}`;
Такое ощущение, что через некоторое время это будет повторяться каждый раз, когда я хочу сделать запрос. Итак, я хотел сделать обертку для него.
Итак, я нашел один пост о том, как сделать это для компонента: https://medium.com/naresh-bhatia/graphql-concepts-i-wish-someone-explained-to-me-a-year-ago-959b234ff430
Но, не смог найтиответ для функционального способа.
Я попробовал решение, и оно работает, но я не знаю, хорошее ли это решение.
Итак, я создал функциональный компонент React, который долженвыполнить загрузку и обработку ошибок, а затем вернуть данные.
export function GraphQLRequest({ requestFunction, params, handleData }) {
if (typeof requestFunction !== 'function') {
return <ErrorAlert message={'Request function is not a function'} />
}
const { loading, error, data } = requestFunction(...params)
if (loading) {
return <div>Loading...</div> // TODO; loading spinner
}
if (error) {
return <ErrorAlert message={error.message} />
}
handleData(data)
return <div></div>
}
А из другого компонента я могу поместить свой GraphQLRequest
компонент в часть рендеринга:
export function SomeView({ match: { params } }) {
const [data, setData] = useState(null)
const id = params.someId
return (<div>
<p className='title'>SomeItem {id}</p>
<GraphQLRequest
handleData={data => setData(data)}
requestFunction={getSomeInfoFromId}
params={[id]}
/>
</div>)
}
Он работает нормально. Но мне немного не по себе из-за наличия пустого компонента, который просто выполняет выборку данных. Правильно ли я чувствую себя ненадежным? Или мне просто продолжать?