docs »
browser-agent »
integrations »
Integrating with React
React Error Boundaries
React 16+ added the concept of “error boundary” components. These components are circuit breakers that catch errors bubbling up from child components. These are a great place to track errors and transmit them to TrackJS:
import React, { Component } from "react";
import { TrackJS } from "trackjs";
export class TrackJSErrorBoundary extends Component {
componentDidCatch(error, errorInfo) {
if (errorInfo && errorInfo.componentStack) {
// The component stack is sometimes useful in development mode
// In production it can be somewhat obfuscated, so feel free to omit this line.
console.log(errorInfo.componentStack);
}
TrackJS.track(error);
this.setState({ error });
}
render() {
// Whatever rendering of error messages or children components you would like
}
}
Copy
TrackJS React Error Boundaries
For more on using ErrorBoundaries, check out the React Documentation .
Redux Middleware
Redux provides excellent hooks to log the actions occurring on your site, and retrieve the state should something blow up. All you need to do is create a simple piece of Redux Middleware and apply it when creating your store:
Global
Module
Legacy
const TrackJSLogger = store => next => action => {
try {
// log every action so they appear in the TrackJS telemetry timeline
console.log(action);
return next(action)
} catch (err) {
// Something bad happened, lets log out the entire state so we can see it in the timeline
console.warn(store.getState());
// NOTE: this assumes TrackJS was initialized previously, at app startup.
window.TrackJS && TrackJS.track(err);
}
}
export default TrackJSLogger;
Copy
/middleware/TrackJSLogger.js
import { TrackJS } from "trackjs";
const TrackJSLogger = store => next => action => {
try {
// log every action so they appear in the TrackJS telemetry timeline
TrackJS.console.log(action);
return next(action)
} catch (err) {
// Something bad happened, lets log out the entire state so we can see it in the timeline
console.warn(store.getState());
// NOTE: this assumes TrackJS was initialized previously, at app startup.
TrackJS.track(err);
}
}
export default TrackJSLogger;
Copy
/middleware/TrackJSLogger.js
const TrackJSLogger = store => next => action => {
try {
// log every action so they appear in the TrackJS telemetry timeline
console.log(action);
return next(action)
} catch (err) {
// Something bad happened, lets log out the entire state so we can see it in the timeline
console.warn(store.getState());
// NOTE: this assumes TrackJS was initialized previously, at app startup.
window.trackJs && trackJs.track(err);
}
}
export default TrackJSLogger;
Copy
/middleware/TrackJSLogger.js
When you’re creating your store, just make sure you apply the middleware:
import { createStore, applyMiddleware } from "redux"
import TrackJSLogger from "./middleware/trackJsLogger"
const store = createStore(todoApp, applyMiddleware(TrackJSLogger));
Copy
index.js
And now, if something blows up, you’ll get great context!
It’s great to log the actions that occurred before an error. But what if you could play them back in Redux dev tools? Our awesome community has created a logger that will allow you to replay the actions in a new session!
Check out the TrackJS Redux Logger on Github .