React Component Names
Learn how Sentry's React Native SDK allows you to monitor your components.
You can set up Sentry's React Native SDK to use React component names instead of element names. So instead of looking at generic names like this:
View > Touchable > View > Text
You can see exactly which React component was used, as in the example below:
MyCard (View, MyCard.ts) > MyButton (Touchable, MyCard.ts) > View > Text
Once you've enabled capturing, you'll be able to see the specific name of the component that was interacted with in breadcrumbs and spans. This removes the ambiguity of having to guess by looking at a generic name, which becomes more difficult the larger your application is.
We're working to release more features that will leverage component name capturing in the future and highly recommended that you configure your project to use it.
- Install React Native SDK
5.25.0-alpha.3
or newer. - Ensure the React components you want to capture are in
.jsx
or.tsx
file formats.
Add the @sentry/react-native/metro
plugin to your Metro configuration and enable the reactComponentAnnotation
option:
metro.config.js
const { getDefaultConfig } = require("@react-native/metro-config");
const { withSentryConfig } = require("@sentry/react-native/metro");
const config = getDefaultConfig(__dirname);
module.exports = withSentryConfig(config, {
annotateReactComponents: true,
});
The Sentry React Native Metro plugin applies @sentry/babel-plugin-component-annotate
, which parses your application's JSX source code at build time and adds additional data
attributes to it. These attributes then appear on the nodes of your application's build, indicating the React component name and file that each node is sourced from.
Here's an example of a component named MyAwesomeComponent
in the file myAwesomeComponent.jsx
:
function MyAwesomeComponent() {
return <Text>This is a really cool and awesome component!</Text>;
}
Here's what the resulting node would look like if your bundler had applied the plugin and built your project:
<Text
data-sentry-component="MyAwesomeComponent"
data-sentry-source-file="myAwesomeComponent.jsx"
>
This is a really cool and awesome component!
</Text>
The Sentry browser SDK will pick off the value from these data
attributes and collect them when your components are interacted with.
If component names are missing from reported events, it could be because the annotations we not added to the JS bundle. To troubleshoot this:
- Check to see if the JS bundle generated by Metro has annotations by text searching for the
data-sentry-component
key in the bundle. - If annotations are missing and you are using React Native without frameworks, check that
config.transformer.babelTransformerPath
is set before passing it towithSentryConfig(config)
. If you are Expo user usingconst config = getSentryExpoConfig(__dirname)
make sure theconfig.transformer.babelTransformerPath
set by thegetSentryExpoConfig
is not overwritten. - Use
export SENTRY_LOG_LEVEL=debug
to enable debug logs to verify that Sentry detected the default transformer and that the Sentry Babel Transformer was executed.
- Lear more about Sentry's React Native Metro bundler plugin.
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").