Как получить доступ к опоре навигации в навигации по вкладкам - React Navigation - PullRequest
0 голосов
/ 12 июля 2020

Мне нужно, чтобы плавающая кнопка появлялась на всех экранах, я поместил ее в нижний навигатор вкладок с абсолютной позицией, но я не смог установить для нее навигацию onPress .. как я могу получить доступ к навигации. Навигация в навигаторе вкладок?

мой код

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>
  ),
};

1 Ответ

0 голосов
/ 13 июля 2020

Чтобы иметь возможность перемещаться в любом месте, сохраните ссылку на 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())
    }
}

И в вашем приложении. js:

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

Теперь NavigationService имеет ссылку на NavigationContainer, поэтому вы можете перемещаться куда угодно, выполнив:

NavigationService.navigate("SomeScreen");

Если вы используете реагирующую навигацию 4 замените CommonActions на NavigationActions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...