Как вложить компонент, переносящий навигатор стека, в навигатор вкладок react

#react-native #react-navigation

#react-native #реакция-навигация

Вопрос:

Текущее поведение Я пытаюсь создать навигатор вкладок, где на одном из экранов / вкладок есть компонент, в котором, помимо прочего, есть навигатор стека. Однако в настоящее время я получаю сообщение об ошибке «В состоянии навигации не найдено маршрутов».

Как воспроизвести код, который я сейчас запускаю, также можно найти в качестве закуски. Код:

     import * as React from 'react';
import { Button, Text, View, StyleSheet } from 'react-native';
import { createAppContainer, createStackNavigator, createBottomTabNavigator } from 'react-navigation';

class ScreenA extends React.Component {
  static navigationOptions = {
    tabBarLabel: 'A',
  };

  render() {
    return (
      <View>
        <Text>Screen A</Text>
      </View>
    );
  }
}

class SettingsHome extends React.Component {
  render() {
    return (
      <Button onPress={() => this.props.navigation.navigate('SettingsScreenA')}>
        <Text>Navigate to Settings A</Text>
      </Button>
    );
  }
}

class SettingsScreenA extends React.Component {
  render() {
    return (
      <View>
        <Text>Settings A</Text>
        <Button onPress={() => this.props.navigation.navigate('SettingsA')}>
          <Text>Back to SettingsHome</Text>
        </Button>
      </View>
    );
  }
}

const SettingsStackNavigator = createStackNavigator({
  SettingsHome: { screen: SettingsHome },
  SettingsScreenA: { screen: SettingsScreenA }
})

class SettingsScreen extends React.Component {
  static navigationOptions = {
    tabBarLabel: 'Settings',
  }

  render() {
    return (
      <View>
        <Text>Some other components...</Text>
        <SettingsStackNavigator navigation={this.props.navigation}/>
      </View>
    );
  }
}

const RootTabNavigator = createBottomTabNavigator({
  ScreenA: { screen: ScreenA },
  Settings: {screen: SettingsScreen },
});

const Navigation = createAppContainer(RootTabNavigator);

export default class App extends React.Component {
  render() {
    return (
      <Navigation />
    );
  }
}
  

Комментарии:

1. Можете ли вы поделиться им на snack.expo.io ?

Ответ №1:

с помощью этой кнопки вы хотите перейти к SettingsA

 <Button onPress={() => this.props.navigation.navigate('SettingsA')}>
          <Text>Back to SettingsHome</Text>
        </Button>
  

но вы определили маршрут экрана настроек как Settings

 const RootTabNavigator = createBottomTabNavigator({
  ScreenA: { screen: ScreenA },
  Settings: {screen: SettingsScreen },
});
  

вы должны исправить это, изменив SettingsA в качестве названия маршрута в навигаторе вкладок

 const RootTabNavigator = createBottomTabNavigator({
  ScreenA: { screen: ScreenA },
  SettingsA: {screen: SettingsScreen },
});