#react-apollo #apollo-client
#реагировать-apollo #apollo-client
Вопрос:
Я извлекаю некоторые данные, используя @apollo/client
v3. На вкладке сети Chrome (результаты http) я вижу, что он возвращает данные и ошибки (я не беспокоюсь об ошибке, я знаю, почему это происходит прямо сейчас.):
{
data: {workItems: [,…]},…},
errors: [{message: "Error trying to resolve position."
}
Однако в моем приложении data
возвращает undefined.
Вот конфигурация моего клиента:
export const graphqlClient = new ApolloClient({
cache: new InMemoryCache(),
link: ApolloLink.from([
onError(({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
graphQLErrors.forEach(error =>
console.log(
`[GraphQL error]: ${JSON.stringify(error, null, 2)}`
)
)
}
if (networkError) {
console.log(`[Network error]: ${networkError}`)
}
}),
apolloLink
])
})
И мой запрос:
gql`
query WorkItems($ppm: String) {
workItems(where: { ppm: $ppm }) {
...WorkItemKanban
}
}
${workItemFragment.workItemKanban}
`
const useWorkItemListDataGraphql = (args: {
query: DocumentNode
variables: { parent: string } | { ppm: string }
}) => {
const { variables, query } = args
const { data, error, loading, refetch } = useQuery<
{ workItems: WorkItem[] },
{ parent: string } | { ppm: string }
>(query, {
pollInterval: 180000,
variables
})
// data returns undefined, but error shows the same error as in Chrome's network tab
return { ...data, error, loading, refetch }
}
Я не уверен, с чего начать, чтобы определить, что идет не так. Загрузка данных работает, когда нет ошибки, но я считаю, что это ненормальное поведение, оно всегда должно загружаться так же, как я вижу на вкладке Chrome.
Ответ №1:
Как описано в документации Apollo — Политики ошибок
По умолчанию политика ошибок рассматривает любые ошибки GraphQL как сетевые ошибки и завершает цепочку запросов
следовательно, по умолчанию клиент Apollo возвращает undefined
, если есть ошибка.
Добавление errorPolicy: 'all'
в параметры запроса или в параметры клиента по умолчанию решает проблему.
Пример:
const { loading, error, data } = useQuery(MY_QUERY, { errorPolicy: 'all' });
Комментарии:
1. В моем случае я продолжаю видеть
errors
на вкладке сети dev tools, но мой запросerrors
возвращаетundefined
даже сerrorPolicy: 'all'
. Возможно, есть какая-то другая скрытая настройка …?