【问题标题】:How to access navigation prop in tabs navigation - react navigation如何在标签导航中访问导航道具 - 反应导航
【发布时间】:2020-07-12 18:49:27
【问题描述】:

我需要在所有屏幕上显示一个浮动按钮,我将它放在具有绝对位置的底部选项卡导航器中,但我无法为其设置 onPress 导航..如何在选项卡导航器中访问 navigation.navigate?

我的代码

MoreStack.navigationOptions = {
  tabBarLabel: 'More',
  tabBarIcon: ({ focused, navigation }) => (
    <View>
      <TabBarIcon
        focused={focused}
        name={Platform.OS === 'ios' ? 'ios-more' : 'md-more'}
        type='ionicon'
      />
       <View
          style={{
            flex: 1,
            position: 'absolute',
            bottom: 20,
            alignItems: 'center',
            right: 10,
          }}
        >
          <TouchableOpacity onPress={() => navigation.navigate('Chat')}>
            <Image
              source={require('../assets/chat.png')}
              style={{ alignSelf: 'center', height: 60, width: 60 }}
            />
          </TouchableOpacity>
        </View>
    </View>
  ),
};

【问题讨论】:

    标签: reactjs react-native react-navigation react-navigation-bottom-tab


    【解决方案1】:

    要能够在任何地方导航,请保留NavigationContainer 的引用。

    示例:我创建了一个NavigationService,如下所示:

    import { CommonActions, StackActions } from "@react-navigation/native";// react navigation 5
    import { NavigationActions, StackActions } from "react-navigation"; // react navigation 4
    
    export default class NavigationService {
        // core navigator
        private static navigator;
    
        // sets the core navigator
        static setTopLevelNavigator(navigatorRef) {
            NavigationService.navigator = navigatorRef;
        }
        // naviget to a route
        static navigate(name, params?) {
            NavigationService.navigator.dispatch(CommonActions.navigate({ name, params }));
        }
    
        static goBack() {
            return NavigationService.navigator.dispatch(CommonActions.goBack());
        }
    
        static popToTop() {
            NavigationService.navigator.dispatch(StackActions.popToTop())
        }
    }
    

    在你的 App.js 中:

    <NavigationContainer ref={(ref) => NavigationService.setTopLevelNavigator(ref)}>
    // 
    </NavigationContainer>
    

    现在NavigationService 具有NavigationContainer 的引用,因此您可以通过以下方式导航到任何地方:

    NavigationService.navigate("SomeScreen");
    

    如果您使用的是反应导航 4,请将 CommonActions 替换为 NavigationActions

    【讨论】:

      猜你喜欢
      • 2020-04-07
      • 2021-08-29
      • 2021-06-13
      • 1970-01-01
      • 2019-04-22
      • 2020-05-29
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多