背景:还是那个可爱的产品经理,需要我在app的tab页面和tab二级页面做不同处理,那么问题来了,在主程序中,构建底部tab,我们用的是createBottomTabNavigator这个方法,也就是说,不能用this.props.navigation这个方法去判断当前是在tab主页面还是二级页。好吧,那就看看怎么解决这个问题。
解决方法:
RN的官方文档里给出了解答。直接贴代码
import { createAppContainer, createStackNavigator } from 'react-navigation';
import { GoogleAnalyticsTracker } from 'react-native-google-analytics-bridge';
const tracker = new GoogleAnalyticsTracker(GA_TRACKING_ID);
// gets the current screen from navigation state
function getActiveRouteName(navigationState) {
if (!navigationState) {
return null;
}
const route = navigationState.routes[navigationState.index];
// dive into nested navigators
if (route.routes) {
return getActiveRouteName(route);
}
return route.routeName;
}
const AppNavigator = createStackNavigator(AppRouteConfigs);
const AppContainer = createAppContainer(AppNavigator);
export default () => (
<AppContainer
onNavigationStateChange={(prevState, currentState, action) => {
const currentScreen = getActiveRouteName(currentState);
const prevScreen = getActiveRouteName(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);
}
}}
/>
);
由上可以看到,在router根路径上加上onNavigationStateChange的方法,可以知道当前和上一个路径的routeName,完美解决了需求。tracker不需要可以直接删掉。 文档地址:https://reactnavigation.org/docs/en/screen-tracking.html
ok,到这里,完结撒花~今天是端午节,也祝大家端午安康!