React Router v4 and v5

Learn about Sentry's React Router v4 / v5 integration.

Make sure you use a Router component combined with createBrowserHistory (or equivalent).

To get parameterized transaction names (for example, /teams/:teamid/user/:userid instead of /teams/123/user/345), you must explicitly set the routes you want parameterized. That's because there is no static route config that the SDK can use in React Router v4/v5.

We recommend you use the withSentryRouting higher order component to create a SentryRoute component that will update the match path on render.

Copied
import {Route, Router, Switch } from 'react-router-dom';
import { createBrowserHistory } from 'history';

import * as Sentry from '@sentry/react';

// Create Custom Sentry Route component
const SentryRoute = Sentry.withSentryRouting(Route);

const history = createBrowserHistory();

Sentry.init({
  dsn: "https://examplePublicKey@o0.ingest.sentry.io/0
example-org / example-project
"
,
integrations: [ Sentry.reactRouterV5BrowserTracingIntegration({ history }), // OR Sentry.reactRouterV4BrowserTracingIntegration({ history }), ], // We recommend adjusting this value in production, or using tracesSampler // for finer control tracesSampleRate: 1.0, }); render() { return ( <Router history={history}> <Switch> <SentryRoute path="/users/:userid" component={() => <div>UserId</div>} /> <SentryRoute path="/users" component={() => <div>Users</div>} /> <SentryRoute path="/" component={() => <div>Home</div>} /> </Switch> </Router> ); }

If you don't want to wrap individual routes, you can still specify parameterized routes manually by passing an array of route config objects, per react-router-config, to the instrumentation function call. You'll also need to provide the matchPath function exported from the react-router-dom or react-router packages.

Copied
import { Route, Router, Switch, matchPath } from 'react-router-dom';
import { createBrowserHistory } from 'history';

import * as Sentry from '@sentry/react';

const history = createBrowserHistory();

// Array of Route Config Objects
// Make sure the order of the routes is correct. The longest url under the same parent should be placed first and in decreasing order.
const routes = [{ path: '/users/:userid' }, { path: '/users' }, { path: '/' }];

Sentry.init({
  dsn: "https://examplePublicKey@o0.ingest.sentry.io/0
example-org / example-project
"
,
integrations: [ Sentry.reactRouterV5BrowserTracingIntegration({ history, routes, matchPath }), ], // We recommend adjusting this value in production, or using tracesSampler // for finer control tracesSampleRate: 1.0, }); // In your App render: render() { return ( <Router history={history}> <Switch> <Route path="/users/:userid" component={() => <div>UserId</div>} /> <Route path="/users" component={() => <div>Users</div>} /> <Route path="/" component={() => <div>Home</div>} /> </Switch> </Router> ); }

Was this helpful?
Help improve this content
Our documentation is open source and available on GitHub. Your contributions are welcome, whether fixing a typo (drat!) or suggesting an update ("yeah, this would be better").