Skip to content

Commit d8a2c4a

Browse files
fix(react-navigation): ensure navigation container is ready before configuring navigation tracker (#755)
1 parent 8b95945 commit d8a2c4a

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## [Unreleased]
4+
5+
### Fixed
6+
7+
- (plugin-react-navigation) Ensure navigation container is ready before initializing tracking [#755](https://github.com/bugsnag/bugsnag-js-performance/pull/755)
8+
39
## [v3.3.0] (2025-11-24)
410

511
### Changed
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { NavigationContainerProps, NavigationContainerRefWithCurrent } from '@react-navigation/native'
1+
import type { NavigationContainerRefWithCurrent } from '@react-navigation/native'
22
import { useNavigationContainerRef, NavigationContainer } from '@react-navigation/native'
33
import React from 'react'
44
import type { NavigationTracker } from './navigation-tracker'
@@ -7,16 +7,22 @@ type CreateNavigationContainer = (NavigationContainerComponent: typeof Navigatio
77
type NavigationContainerRef = NavigationContainerRefWithCurrent<ReactNavigation.RootParamList>
88

99
export const createNavigationContainer: CreateNavigationContainer = (NavigationContainerComponent = NavigationContainer, navigationTracker: NavigationTracker) => {
10-
return React.forwardRef<NavigationContainerRef, NavigationContainerProps>((props, _ref) => {
11-
const navigationContainerRef = _ref as NavigationContainerRef || useNavigationContainerRef()
10+
return React.forwardRef<NavigationContainerRef, React.ComponentPropsWithoutRef<typeof NavigationContainer>>((props, ref) => {
11+
const navigationContainerRef = ref as NavigationContainerRef || useNavigationContainerRef()
1212

13-
navigationTracker.configure(navigationContainerRef)
13+
const wrappedOnReady = () => {
14+
navigationTracker.configure(navigationContainerRef)
15+
if (typeof props.onReady === 'function') {
16+
props.onReady()
17+
}
18+
}
1419

1520
return (
16-
<NavigationContainerComponent
17-
{...props}
18-
ref={navigationContainerRef}
19-
/>
21+
<NavigationContainerComponent
22+
{...props}
23+
ref={navigationContainerRef}
24+
onReady={wrappedOnReady}
25+
/>
2026
)
2127
}) as typeof NavigationContainerComponent
2228
}

test/react-native/features/fixtures/scenario-launcher/scenarios/core/ReactNavigationScenario.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ export function App() {
3535
function Screen1({ navigation }) {
3636
useEffect(() => {
3737
parentSpan = BugsnagPerformance.startSpan('ParentSpan')
38-
navigation.navigate('Screen2')
38+
setTimeout(() => {
39+
navigation.navigate('Screen2')
40+
}, 250)
3941
}, [])
4042

4143
return (

0 commit comments

Comments
 (0)