【发布时间】:2021-02-23 13:20:06
【问题描述】:
我想在 @apollo/react-hook 中使用 useQuery 时捕获组件级别的错误并防止传播。
这是我的示例代码
const invitationDocument = gql`
query DecodeInvitation($token: String!) {
DecodeInvitation(token: $token) {
name
email
}
}
`
const InvitationPage = (props) => {
const { data, error, loading } = useQuery(invitationDocument, {variables: { token: "XXXX" }});
if(error)
{
return <InvitationErrorPage error={error.message}/>
}
return loading? <LoadingPage> : <InvitationAcceptPage />
}
它工作正常,但同时,错误正在传播到它的父级,所以我收到另一个错误通知消息,它来自全局级别的错误处理程序。 在应用程序级别,我使用 apollo-link-error 来管理 Graphql 错误。
import { onError } from 'apollo-link-error';
const errorLink = onError (({ graphqlErrors, networkError }) => {
if(graphqlErrors)
notification.error(graphqlErrors[0].message);
});
const client = ApolloClient({
cache: new InMemoryCache(),
link: ApolloLink.from([
errorLink,
new HttpLink({ uri: `http://localhost:8080/graphql`})
])
})
目前,我正在寻找一种解决方案来停止传播到顶级,这样我就可以只显示 InvitationErrorPage 并停止在全局级别显示错误通知。
【问题讨论】:
-
什么??? ...错误链接只是从任何graphql响应中捕获错误,它是响应处理的一部分...这里没有任何传播..如果您不想要它,只需删除错误链接或仅对网络错误做出反应
-
是的,对于一般的graphl错误处理,我想通过错误链接来做,包括显示通知消息。但在特定情况下,即我的邀请页面,我需要显示“ErrorPage”而不是显示一般错误通知。
-
按响应内容[类型]过滤?
-
但是我实际上无法处理 apollo-server 并且邀请查询错误与将军相比没有特殊的内容类型。所以按响应内容[类型]过滤似乎不是一个好的解决方案。
标签: error-handling graphql apollo react-apollo apollo-client