【发布时间】:2020-04-08 22:07:29
【问题描述】:
我正在尝试使用 apollo-link-error 显示 toast/snackbar,但是当我这样做时,错误 toast 反复出现而没有停止,并且加载时显示的加载器在后台旋转。
我的 apollo 客户端包含此代码...
const errorLink = onError(handleErrors)
const httpLink: ApolloLink = createHttpLink({
uri: graphqlUri,
})
const link = ApolloLink.from([errorLink, authLink, httpLink])
handleErrors 函数在我的 App.tsx 中传入的位置...
const { addToast } = useToasts()
const handleErrors: ErrorHandler = ({ graphQLErrors, networkError }) => {
if (graphQLErrors) {
const errors = graphQLErrors.map(({ message }) => message)
addToast(errors.join(`, `))
}
if (networkError) console.log(`[Network error]: ${networkError}`)
}
const client = apolloClient(
token,
GRAPHQL_URI,
handleErrors
)
然后传入ApolloProvider。 useToasts 钩子来自react-toast-notifications。
我之前正在处理组件中的错误...
const { loading, data, error } = useQuery(Query)
if (error) return <div>{error.message}</div>
但在后端已从使用graphql-yoga 切换到apollo-server,因此必须以不同的方式处理错误。
如果我删除了 toast 通知,而只是打印到控制台,它就可以正常工作。为什么我的 toast 被重复创建,我怎么能在错误时只显示一个?
谢谢。
【问题讨论】:
-
graphql-yoga在后台使用apollo-server-- 在两者之间切换不需要对前端代码进行任何更改。 -
@bordeltabernacle 你解决了这个问题了吗?看看我的同类 -> stackoverflow.com/questions/62086440/…
标签: reactjs react-hooks apollo-client apollo-server