Faro package that enables easier integration in projects built with React.
Warning: currently pre-release and subject to frequent breaking changes. Use at your own risk.
Out of the box, the package provides you the following features:
- Error Boundary - Provides additional stacktrace for errors
- Component Profiler - Capture every re-render of a component, the un/mounting time etc.
- Router (v4-v6) integration - Send events for all route changes
- SSR support
import { createRoutesFromChildren, matchRoutes, Routes, useLocation, useNavigationType } from 'react-router-dom';
import { getWebInstrumentations, initializeFaro, ReactIntegration, ReactRouterVersion } from '@grafana/faro-react';
import { TracingInstrumentation } from '@grafana/faro-web-tracing';
initializeFaro({
// ...
instrumentations: [
// Load the default Web instrumentations
...getWebInstrumentations(),
// Tracing Instrumentation is needed if you want to use the React Profiler
new TracingInstrumentation(),
new ReactIntegration({
// Only needed if you want to use the React Router instrumentation
router: {
version: ReactRouterVersion.V6,
dependencies: {
createRoutesFromChildren,
matchRoutes,
Routes,
useLocation,
useNavigationType,
},
},
// Or if you use react-router v4/v5
router2: {
version: ReactRouterVersion.V5, // or ReactRouterVersion.V4,
dependencies: {
history, // the history object used by react-router
Route, // Route component imported from react-router package
},
},
}),
],
});
import { FaroErrorBoundary } from '@grafana/faro-react';
// during render
<FaroErrorBoundary>
<App />
</FaroErrorBoundary>;
or
import { withErrorBoundary } from '@grafana/faro-react';
export default withErrorBoundary(App);
import { FaroRoutes } from '@grafana/faro-react';
// during render
<FaroRoutes>
<Route path="/" element={<Home />} />
{/* ... */}
</FaroRoutes>;
import { FaroRoute } from '@grafana/faro-react';
// during render
<Switch>
<FaroRoute path="/">
<Home />
</FaroRoute>
{/* ... */}
</Switch>;
import { withFaroProfiler } from '@grafana/faro-react';
export default withFaroProfiler(App);