Vue.js offers a handler for any uncaught errors during component render functiond/watchers. You can use it to deliver errors by calling the Understand.logError
method.
Vue.config.errorHandler = function (err, vm, info) {
Understand.logError(err);
}
If you're using React 16 you can leverage ErrorBoundary
components to capture errors inside your render tree.
class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}
componentDidCatch(error, info) {
// Display fallback UI
this.setState({ hasError: true });
// Send error to Understand
Understand.logError(error);
}
render() {
if (this.state.hasError) {
// You can render any custom fallback UI
return <h1>Something went wrong.</h1>;
}
return this.props.children;
}
}
Then you can use it as a regular component:
<ErrorBoundary>
<MyWidget />
</ErrorBoundary>
By default, Angular comes with its own ErrorHandler
that intercepts all the errors and logs them to the console, preventing the app from crashing. To report errors to Understand you need to create a new class that implements the ErrorHandler
:
import { ErrorHandler, Injectable} from '@angular/core';
@Injectable()
export class UnderstandErrorHandler implements ErrorHandler {
handleError(error: Error) {
Understand.logError(error);
}
}
After that you have to configure the Angular app to use the UnderstandErrorHandler
class when a new client error happens:
import {NgModule, ApplicationRef, ErrorHandler} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import {UnderstandErrorHandler} from './understand-error-handler';
import {AppComponent} from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
bootstrap: [AppComponent],
providers: [
{
provide: ErrorHandler,
useClass: UnderstandErrorHandler,
},
],
})
export class AppModule {}