【问题标题】:How to catch errors with ApolloProvider globally如何在全局范围内使用 ApolloProvider 捕获错误
【发布时间】:2021-01-26 16:47:39
【问题描述】:

我正在尝试使用来自 apollo 客户端的 onError 方法捕获我所有的 graphQLErrors。 我的目标是为我的所有 API 调用只设置一个 catch 块。

const errorLink = onError(({ graphQLErrors, networkError ,operation}) => {
   if (graphQLErrors && graphQLErrors?.length > 0) {
     catchError((e) => handleError(e))
   } else if (networkError) {
     console.log(`[Network error]: ${networkError}`)
   }
})

目前的行为是: 如果我没有在调用 API 的组件中捕获每个错误,则默认错误页面会出现错误

期望的行为: 默认的错误页面永远不会出现(错误将在onError方法内部处理)

【问题讨论】:

    标签: reactjs react-apollo apollo-client apollo-link


    【解决方案1】:

    将您的应用包装在错误边界组件中

    在文档中,这是一个捕捉和打印错误的反应组件示例。您可以以任何您想要的方式响应错误。

    很遗憾目前没有钩子可以捕捉问题,你必须使用类函数生命周期方法componentDidCatch

    class ErrorBoundary extends React.Component {
      constructor(props) {
        super(props);
        this.state = { hasError: false };
      }
    
      static getDerivedStateFromError(error) {
        // Update state so the next render will show the fallback UI.
        return { hasError: true };
      }
    
      componentDidCatch(error, errorInfo) {
        // You can also log the error to an error reporting service
        logErrorToMyService(error, errorInfo);
      }
    
      render() {
        if (this.state.hasError) {
          // You can render any custom fallback UI
          return <h1>Something went wrong.</h1>;
        }
    
        return this.props.children; 
      }
    }
    

    【讨论】:

    • 谢谢,但我需要 ApolloProvider onError 的解决方案,我想忽略该错误并且应用程序不会因此而崩溃,只是为了捕获它并执行 console.log 或类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2010-10-21
    • 1970-01-01
    • 2019-05-03
    • 2023-03-12
    相关资源
    最近更新 更多