Ich verwende den Tab Navigator von React Navigation von https://reactnavigation.org/docs/navigators/tab . Wenn ich zwischen den Registerkarten wechsle, bekomme ich keinen Navigationsstatus in this.props.navigation.
Tab Navigator:
import React, { Component } from 'react';
import { View, Text, Image} from 'react-native';
import DashboardTabScreen from 'FinanceBakerZ/src/components/dashboard/DashboardTabScreen';
import { TabNavigator } from 'react-navigation';
render() {
console.log(this.props.navigation);
return (
<View>
<DashboardTabNavigator />
</View>
);
}
const DashboardTabNavigator = TabNavigator({
TODAY: {
screen: DashboardTabScreen
},
THISWEEK: {
screen: DashboardTabScreen
}
});
DASHBOARD-BILDSCHIRM:
import React, { Component } from 'react';
import { View, Text} from 'react-native';
export default class DashboardTabScreen extends Component {
constructor(props) {
super(props);
this.state = {};
console.log('props', props);
}
render() {
console.log('props', this.props);
return (
<View style={{flex: 1}}>
<Text>Checking!</Text>
</View>
);
}
}
Beim Dashboard-Bildschirm werden Requisiten angezeigt, wenn die Komponente zuerst gerendert wird. Beim Wechseln der Registerkarten werden jedoch keine Requisiten angezeigt. Ich brauche den aktuellen Namen des Bildschirms HEUTE oder THISWEEK.
Ihr Problem bezieht sich auf "Screen Tracking", react-navigation
hat hierfür eine offizielle Anleitung. Sie können onNavigationStateChange
verwenden, um den Bildschirm mithilfe des integrierten Navigationscontainers zu verfolgen, oder Sie schreiben eine Redux-Middleware, um den Bildschirm zu verfolgen, wenn Sie mit Redux integrieren möchten. Weitere Einzelheiten finden Sie in der offiziellen Anleitung: Screen-Tracking . Nachfolgend finden Sie einen Beispielcode aus dem Handbuch mit onNavigationStateChange
:
import { GoogleAnalyticsTracker } from 'react-native-google-analytics-bridge';
const tracker = new GoogleAnalyticsTracker(GA_TRACKING_ID);
// gets the current screen from navigation state
function getCurrentRouteName(navigationState) {
if (!navigationState) {
return null;
}
const route = navigationState.routes[navigationState.index];
// dive into nested navigators
if (route.routes) {
return getCurrentRouteName(route);
}
return route.routeName;
}
const AppNavigator = StackNavigator(AppRouteConfigs);
export default () => (
<AppNavigator
onNavigationStateChange={(prevState, currentState) => {
const currentScreen = getCurrentRouteName(currentState);
const prevScreen = getCurrentRouteName(prevState);
if (prevScreen !== currentScreen) {
// the line below uses the Google Analytics tracker
// change the tracker here to use other Mobile analytics SDK.
tracker.trackScreenView(currentScreen);
}
}}
/>
);
Überprüfen Sie zuerst alle Eigenschaften, z
<Text>{JSON.stringify(this.props, null, 2)}</Text>
Über dem json-Array wird der aktuelle Navigationsstatus unter routeName index angezeigt, d. H.
this.props.navigation.state.routeName
Haben Sie versucht, navigationOptions in Ihrem Routenobjekt zu definieren?
const DashboardTabNavigator = TabNavigator({
TODAY: {
screen: DashboardTabScreen
navigationOptions: {
title: 'TODAY',
},
},
})
Sie können navigationOptions auch auf einen Rückruf setzen, der mit dem Navigationsobjekt aufgerufen wird.
const DashboardTabNavigator = TabNavigator({
TODAY: {
screen: DashboardTabScreen
navigationOptions: ({ navigation }) => ({
title: 'TODAY',
navigationState: navigation.state,
})
},
})
Weitere Informationen über navigationOptions https://reactnavigation.org/docs/navigators/